Python-使用Popen中的列表作为命令

2024-04-30 18:28:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用Popen创建一个子流程。这是我的代码:

hostname = 'host'
servername = 'server'
commandargs = ['/usr/sbin/mminfo',' -o n',' -s',servername,' -q "client=\'',hostname,'\',savetime>=last day"',' -r "client,name"']
process = subprocess.Popen(commandargs, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

问题是执行的命令失败,并显示一条消息,即所联系的服务器不可用。似乎没有使用变量hostname。。。 在Popen命令(Shell=True)中使用字符串(而不是列表)进行相同的尝试,一切正常。

有人知道密码有什么问题吗?

问候。 斯特凡


Tags: 代码命令clienthostserverusr流程hostname
2条回答

在列表中,每个参数都必须是自己的项。字符串中不应有空格:

commandargs = ['/usr/sbin/mminfo', '-o', 'n', '-s', servername,
               '-q', "client='" + hostname + "',savetime>=last day",
               '-r', 'client,name']

给定列表中的每个字符串都作为单个命令行参数处理。使用此语法时也不需要使用引号。

试试这样的:

hostname = 'host'
servername = 'server'
commandargs = [
    '/usr/sbin/mminfo',
    '-o', 'n', # these are separate arguments, but on the same line for clarity's sake
    '-s', servername, # same here
    '-q', "client='%s',savetime>=last day" % hostname, # same here...
    '-r', 'client,name' # and here.
]
process = subprocess.Popen(commandargs, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

编辑:或者,根据评论,比如

import subprocess

client_name = "lxds05"
server_name = "nsr_srv"

queryspec = "client='%s',savetime>=last day" % client_name
reportspec = "client,name,savetime(17),nsavetime,level,ssflags"

args = [
    '/usr/sbin/mminfo',
    '-o', 'n',
    '-s', server_name,
    '-q', queryspec,
    '-r', reportspec,
    '-x', 'c'
]

subprocess.Popen(args) # ... etc

相关问题 更多 >