1

我正在使用 os.system() 运行 python 程序并尝试将其输出记录到文件中。这工作正常。

os.system("myprogram.py -arg1 -arg2 > outputfile.txt")
#something here to kill/cleanup whatever is left from os.system()
#read outputfile1.txt- this output file got all the data I needed from os.system()

问题是 myprogram.py 调用了另一个 python 程序,它给了我需要但没有完成的输出——我什至可以看到提示变得不同,如下图所示

在此处输入图像描述

当我尝试使用 os.system("quit()") 和 subprocess.popen("quit()", shell=False) 进入程序的下一行时,有没有办法杀死子进程什么都不做。

我不能真正使用exit(),因为那只会一起杀死python。

顺便说一句,这个摊位

f=subprocess.Popen("myprogram.py -arg1 > outputfile.txt") and then 
f.communicate() #this just stalls because the child program does not end. 
4

1 回答 1

1

正在调用的程序使myprogram.py您进入 python 提示符。为什么会发生这种情况,除非您向我们展示代码,否则我们无法告诉您。

使用subprocess模块(更通用)优于使用os.system.

但是您没有正确使用子流程。试试这样:

with open('outputfile.txt', 'w+') as outf:
    rc = subprocess.call(['python', 'myprogram.py', '-arg1'], stdout=outf)

with语句将在subprocess.call完成后关闭文件。程序及其参数应作为字符串列表给出。重定向是通过使用std...参数来实现的。

完成后myprogram.pyrc包含其返回码。

如果要捕获程序的输出,请subprocess.check_output()改用。

于 2013-03-28T23:40:41.403 回答