Python在我的Python项目中使用Popen时遇到了一些麻烦。基本上我有一个用户可以键入到文本小部件的GUI。在按下按钮时,文本将被保存到一个新文件中,然后作为一个python文件在使用popen的子流程中运行。所以基本上,我的GUI充当IDE的一种类型,让用户输入他们的代码,按下“运行”按钮,然后他们键入的脚本作为子进程运行。Python强制子进程失败并返回非零代码
一切工作正常,但我很努力弄清楚如何检测用户的代码中的语法错误。我试图做这样的事情:
p = subprocess.Popen(cmd)
p.wait()
if p.returncode != 0:
print("Fail")
没有这个代码我的程序确实如预期,只要不存在任何语法错误运行子进程,然而与此,脚本的预期行为的用户输入没有完成,并且返回值也始终为0,无论语法错误。我认为这可能是因为线程已经正确执行,无论它在哪里。
我也尝试添加的东西,如:
sys.exit(1)
进入子代码,迫使脚本与特定的返回码退出但它似乎仍然返回0。再次,我想这是因为SYS。 exit()只能在程序的主线程中运行,但我不确定。
所以基本上我试图找出一种方法来使一个子进程的返回代码的值不是0,因为它由于用户的语法错误而无法正常运行。
另一种方法,我想打开一个管道stderr时,我做popen但是我真的不需要读取错误信息是什么。我的计划是如果某个键被错误键入,只会引发某种类型的通用错误消息。
非常感谢您阅读本文,很抱歉,如果它很混乱。
我无法复制它。 'subprocess.call([“python”,“-c”,“import sys; sys.exit(1)”])'返回'1'作为出口代码。你能提供一个完整的小例子来证明这个问题吗? – jfs