【问题标题】:Popen in Python 3在 Python 3 中打开
【发布时间】:2014-02-10 23:03:08
【问题描述】:

这里是我程序中的代码 sn-p。

我正在尝试在 Windows 上打开 cmd.exe 并将命令传递给单独的程序并捕获输出并对其进行解析,而不必每次都加载 cmd.exe。

我在使用 Python 2 的地方找到了执行此操作的所有示例,并且 Python 3 中关于 PIPES 的一些更改让我不确定出了什么问题。

#DOScmd is a list of command line parameters to type into command shell.

p = subprocess.Popen('cmd.exe',
                 stdout=subprocess.PIPE,
                 stdin=subprocess.PIPE,
                 shell=True,
                 bufsize=0)


myCall = ' '.join(DOScmd) + '\n'
p.stdin.write( bytes(myCall, 'UTF-8') )
searchLines =  p.stdout.readlines()               
print(searchLines)

我正在调用一个程序 bowtie.exe。现在,当我这样做时,bowtie.exe 崩溃了。我想我可能会激怒 I/O 之神。任何帮助表示赞赏。

【问题讨论】:

  • 领结很酷! :-) 你能发布完整的错误输出吗? bowtie.exe 自己工作吗?
  • 没有错误输出 - 标准窗口的错误 - “bowtie.exe 已停止工作... windows 正在关闭它。” Bowtie.exe 从命令提示符运行,我也让它工作调用 p = subprocess.Popen(DOScmd),程序执行然后终止。不同之处在于我想让一个 cmd.exe 保持打开状态,因为每次启动 cmd.exe 的开销都会大大减慢我的速度。
  • 我猜这个问题可以这样问:“Python 3 中如何使用 subprocess.popen 打开程序并重复传递 INPUT 并读取 OUTPUT?”
  • 更新:当我关闭锁定的 Python 程序时,bowtie 崩溃了,所以 bowtie 崩溃不是问题,而是症状。
  • 您的问题有几个问题。尝试一次解决一个问题,而不是一次解决所有问题。首先写下what你想让你的python脚本做什么(而不是如何)。如何解决“repeated pass INPUT and read OUTPUT”很大程度上取决于具体的程序,以及在你的情况下你想具体如何与之交互。

标签: python windows pipe popen


【解决方案1】:

我正在尝试在 Windows 上打开 cmd.exe 并将命令传递给单独的程序并捕获输出并解析它,而不必每次都加载 cmd.exe。

除非您想运行 cmd.exe 内置的命令,例如 dir,否则您根本不需要启动 cmd.exe

from subprocess import check_output

for cmd in ["first.exe", "arg1", "arg2"], ["second.exe", ".."]:
    output = check_output(cmd)
    do_whatever_you_like_with(output)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    相关资源
    最近更新 更多