os.system to subprocess.Popen或subprocess.call

时间:2015-03-17 17:35:05

标签: python subprocess os.system

我有一个函数如下,当我在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吗?

1 个答案:

答案 0 :(得分:1)

如果你想让shell为你安排管道,你需要让shell=True 让第一个参数成为一个字符串,就像你在{{1 },列表。对于os.system,列表意味着执行作为列表的第一项给出的程序,其他项作为命令行参数;所以你不能让第一个项目包含shell=False,并期望shell代表你安排管道。

您的替代方案是自己安排“管道”或其等价物 - 例如,这里可能最简单,只需在|上打开一个文件对象作为Kill.txt的标准输入(stdin=)只执行subprocess.Popen的{​​1}}(我相信testclient除了将文件读出到stdout之外什么都不做,所以这应该足以满足这个特定的用例。)