Skip to main content
 首页 » 编程设计

Python 子进程 : Command Fails in Python but Works in Shell

2025年05月04日13zhwl

我正在尝试通过 Python 的子进程运行命令,但它无法正常运行。如果我在 shell 中输入:

pack < packfile.dat 

其中pack是我的软件,packfile是输入文件,那么软件运行正常。

如果我在 python 中尝试这个:

import subprocess as sp 
import shlex 
 
cmd = 'pack < packfile.dat'.split() 
p = sp.Popen(cmd) 

软件提示:

Pack must be run with: pack < inputfile.inp  
 
Reading input file... (Control-C aborts) 

它卡在那里。

这最后一部分是我的软件特有的,但事实是运行相同命令的两种方法会给出不同的结果,而事实并非如此。

谁能告诉我我做错了什么?

实际上,我打算最终做到:

p = sp.Popen(cmd,stdout=sp.PIPE,stderr=sp.PIPE) 
stdout, stderr = p.communicate() 

由于我对此有点陌生,如果这不是最佳实践,请告诉我。

提前致谢。

请您参考如下方法:

I/O 重定向是 shell 的产物,默认情况下 Popen 不使用它。试试这个:

p = sp.Popen(cmd, shell=True) 

subprocess.Popen() IO redirect

从那里您还会看到有些人不喜欢 shell 选项。在那种情况下,您可能可以通过以下方式完成它:

with open('input.txt', 'r') as input: 
    p = subprocess.Popen('./server.py', stdin=input)