首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >os.system到subprocess.Popen或subprocess.call

os.system到subprocess.Popen或subprocess.call
EN

Stack Overflow用户
提问于 2015-03-17 17:35:04
回答 1查看 695关注 0票数 0

我有一个如下所示的函数,当我在CMD中执行我的python代码(SIMT是一个可执行的)时,它工作得很好。然而,当我用py2exe构建我的可执行文件时,一个shell窗口很快就会出现并消失。因此,我搜索并发现,我可以使用subprocess.popen与creationflags= 0x08000000。但不起作用。

这是我的职责

代码语言:javascript
复制
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替换为:

代码语言:javascript
复制
  subprocess.Popen(["type Kill.txt | testclient p . ", SIMT], creationflags= 0x08000000, shell=True).communicate()

另外,我需要shell=True吗?

EN

回答 1

Stack Overflow用户

发布于 2015-03-17 17:47:43

如果希望shell为您安排管道,则确实需要让shell=True 有第一个参数为字符串,就像对于os.system而不是的列表一样。使用shell=False,列表意味着执行作为列表的第一项的程序,其他项作为命令行参数;因此,不能让第一个项目包含一个|,并期望shell代表您安排该管道。

您的替代方法是自己安排“管道”或它的等效项--例如,这里可能最简单的是,只要在Kill.txt上打开一个文件对象,作为只执行testclientsubprocess.Popen的标准输入(stdin=) (我相信type只会将文件读取到stdout,因此对于这个特定的用例应该足够了)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29105934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档