2017-07-04 65 views
0

如果出现错误,我想将此错误显示给消息框并停止if语句。Python - 我如何捕获chown的错误。 chown:无效的用户

我该如何抓住错误的家伙?

+0

您需要显示一些代码。你在代码中使用shell命令吗?你在使用子流程模块吗? – heliotrope

+0

抱歉缺少编码。 DEF执行(): filez = tb_filepath.get() O = tb_o.get() G = tb_group.get() CHOWN = “CHOWN” + O + “:” + G + “” + filez ------------------------------------------------- ----------------- 如果我在O文本框中键入abc,这是没有这个用户, 我怎么能将无效的用户错误消息框? – Tony

+0

该代码的正确位置是将其编辑到您的问题中。我不知道你在用什么模块。你也需要参考文档。见Thavendren的答案。 – heliotrope

回答

1

取决于你如何调用它。如果您使用的子模块:

p = subprocess.Popen(['chown', 'bad_user', '/file_path'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
out, err = p.communicate() 
print(err) 

应该给你:

CHOWN:bad_user:非法用户名

现在,这是在Python 2.7。 Python 3有一个更简单的方法来调用它。应该是:(未测试)

result = subprocess.run(['chown', 'bad_user', '/file_path'], stdout=subprocess.PIPE) 
result.stdout 
+0

即时通讯使用os.popen()来运行命令chown。 是否有任何方法来捕捉错误? – Tony

+0

不确定os.popen(),但你可以使用os.popen3得到它: 进口OS (child_stdin,child_stdout,child_stderr)= os.popen3( 'CHOWN bad_user /Users/sravindran/test.py' ) print('error = {}'.format(child_stderr.read())) 此外,所有os.popen *函数自2.6开始已被弃用。您应该从技术上使用子流程模块。仅供参考 – sharath