Python子进程:命令在Python中失败,但在Shell中工作

Python子进程:命令在Python中失败,但在Shell中工作,python,command-line,subprocess,Python,Command Line,Subprocess,我试图通过Python的子进程运行命令,但它无法正常运行。如果我在shell中键入: pack < packfile.dat 软件抱怨: Pack must be run with: pack < inputfile.inp Reading input file... (Control-C aborts) 因为我对此有点陌生,如果这不是最佳实践,请让我知道 提前感谢。I/O重定向是shell的产品,默认情况下Popen不使用重定向。试试这个: p = sp.Popen(cmd

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

pack < packfile.dat
软件抱怨:

Pack must be run with: pack < inputfile.inp 

Reading input file... (Control-C aborts)
因为我对此有点陌生,如果这不是最佳实践,请让我知道


提前感谢。

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

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

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

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

p = sp.Popen(cmd, shell=True)
import subprocess as sp
p = sp.Popen(['pack'], stdin = open('packfile.dat', 'r'))

谢谢!(提供答案和解释)谢谢!这非常有帮助!感谢您的快速回复,我对此表示感谢。我尝试了shell=True,但不幸的是,这不起作用。根据其他答案,“另请参见
p = sp.Popen(cmd,stdout=sp.PIPE,stderr=sp.PIPE, stdin=open('packfile.dat'))
import subprocess as sp
p = sp.Popen(['pack'], stdin = open('packfile.dat', 'r'))