我有一个函数如下,当我在CMD中执行我的python代码时工作正常(SIMT是一个可执行文件)。但是,当我使用py2exe构建可执行文件时,shell窗口会快速出现并消失。所以我搜索并发现我可以使用subprocess.popen和creationflags = 0x08000000。但它不起作用。
这是我的功能
def Kill(SIMT):
outfile1 = open('Kill.txt', 'w')
outfile1.write('Kill' + '\r\n')
outfile1.write('x')
outfile1.close()
os.system("type Kill.txt | testclient p . " + SIMT)
os.remove('Kill.txt')
我将os.system替换为:
subprocess.Popen(["type Kill.txt | testclient p . ", SIMT], creationflags= 0x08000000, shell=True).communicate()
另外,我需要shell = True吗?
答案 0 :(得分:1)
如果你想让shell为你安排管道,你需要让shell=True
和让第一个参数成为一个字符串,就像你在{{1 },不列表。对于os.system
,列表意味着执行作为列表的第一项给出的程序,其他项作为命令行参数;所以你不能让第一个项目包含shell=False
,并期望shell代表你安排管道。
您的替代方案是自己安排“管道”或其等价物 - 例如,这里可能最简单,只需在|
上打开一个文件对象作为Kill.txt
的标准输入(stdin=
)只执行subprocess.Popen
的{1}}(我相信testclient
除了将文件读出到stdout之外什么都不做,所以这应该足以满足这个特定的用例。)