如何调用python';子流程';使用管道操作符和多个参数
我正在使用Python,希望运行“editUtility”,如下所示如何调用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
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的参数。这就是为什么它没有回升。