如何调用python';子流程';使用管道操作符和多个参数

如何调用python';子流程';使用管道操作符和多个参数,python,subprocess,echo,Python,Subprocess,Echo,我正在使用Python,希望运行“editUtility”,如下所示 echo "Some data" | /opt/editUtility --append="configuration" --user=userid 1483485 其中,1483485是一些随机数,也作为参数传递 我所做的是通过Python“subprocess”调用“editUtility”,并传递参数,如下所示 proc = subprocess.Popen(['/opt/editUtility', '--append

我正在使用Python,希望运行“editUtility”,如下所示

echo "Some data" | /opt/editUtility --append="configuration" --user=userid 1483485
其中,
1483485
是一些随机数,也作为参数传递

我所做的是通过Python“subprocess”调用“editUtility”,并传递参数,如下所示

proc = subprocess.Popen(['/opt/editUtility', '--append=configuration'],stdout=subprocess.PIPE)
            lsOutput=""
            while True:
              line = proc.stdout.readline()
              lsOutput += line.decode()
              if not line:
                break
            print(lsOutput)

我的问题是:如何传递上面提到的所有参数,以及如何将“echo”some data与管道符号一起与子流程调用相匹配?

因此,如果您只想输入一个字符串,然后读取流程的输出,直到可以使用结束:

cmd = [
    '/opt/editUtility',
    '--append=configuration',
    '--user=userid',
    '1483485'
]

proc = subprocess.Popen(
    cmd,
    stdin=subprocess.PIPE,
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE
)

(stdoutData, stderrData) = proc.communicate('Some data')

editUtility
是在将任何内容写入stdout之前读取所有stdin,还是交错读取和写入?要清楚,在大多数情况下,正确的做法是使用
stdin=subprocess.PIPE
并调用
proc.communicate('Some data')
。当然很简单……如果您需要能够以增量方式读取输出,并且不能保证
editUtility
在任何写入之前执行所有读取操作,那么请参阅“如何使用带管道的子流程命令”在链接的管道中重复。请注意,一般情况下,应关闭与现有内容重复的Q&a条目,没有回答;请参阅的“回答好的问题”部分,特别是关于“以前已经被问过并回答过多次”的问题的要点。该过程没有选择值“1483485”。我们如何传递它?@Ammad它将取决于参数的语法-通过
--user=1483485
传递用户ID更有意义,但请检查手册页并尝试在命令行上确认。这是传递时唯一没有--variablename=value的参数。这就是为什么它没有回升。