0

我想从 python 脚本执行一个带有 3 个参数的 shell 脚本。(如此处所述:Python:使用参数(变量)执行shell脚本,但在shell脚本中未读取参数

这是我的代码:

subprocess.call('/root/bin/xen-limit %s %s %s' % (str(dom),str(result),str('--nosave'),), shell=True)

变量 dom 和 result 包含字符串。

这是输出:

/bin/sh: --nosave: not found

更新:

那是变量“结果”:

c1 = ['/bin/cat', '/etc/xen/%s.cfg' % (str(dom))]
p1 = subprocess.Popen(c1, stdout=subprocess.PIPE)

c2 = ['grep', 'limited']
p2 = subprocess.Popen(c2, stdin=p1.stdout, stdout=subprocess.PIPE)

c3 = ['cut', '-d=', '-f2']
p3 = subprocess.Popen(c3, stdin=p2.stdout, stdout=subprocess.PIPE)

c4 = ['tr', '-d', '\"']
p4 = subprocess.Popen(c4, stdin=p3.stdout, stdout=subprocess.PIPE)

result = p4.stdout.read()

之后,变量 result 包含一个带有 mbit 的数字(例如 16mbit)

dom 是一个类似“myserver”的字符串

4

3 回答 3

2
from subprocess import Popen, STDOUT, PIPE
print('Executing: /root/bin/xen-limit ' + str(dom) + ' ' + str(result) + ' --nosave')
handle = Popen('/root/bin/xen-limit ' + str(dom) + ' ' + str(result) + ' --nosave', shell=True, stdout=PIPE, stderr=STDOUT, stdin=PIPE)
print(handle.stdout.read())

如果这不起作用,我真的不知道会发生什么。这是描述打开 3:d 方应用程序或脚本同时仍为您提供所需调试的最基本但错误的方法。

于 2013-10-14T11:51:36.377 回答
0

传递由命令名称及其参数组成的列表更简单(也更安全)。

subprocess.call(['/root/bin/xen-limit]',
                str(dom),
                str(result),
                str('--nosave')
                ])

str('--nosave')是一个空操作,因为'--nosave'它已经是一个字符串。对于dom和也可能如此result

于 2013-10-14T12:39:52.593 回答
0

为什么不保存--nosave到变量并将变量传入subprocess

于 2013-10-14T12:30:57.953 回答