[英]Execute shell script from python with a variable
我有这个代码:
opts.info("Started domain %s (id=%d)" % (dom, domid))
我想用上面的参数domid
执行一个 shell 脚本。 像这样的东西:
subprocess.call(['test.sh %d', domid])
它是如何工作的?
我已经尝试过:
subprocess.call(['test.sh', domid])
但我收到此错误:
File "/usr/lib/xen-4.1/bin/xm", line 8, in <module>
main.main(sys.argv)
File "/usr/lib/xen-4.1/bin/../lib/python/xen/xm/main.py", line 3983, in main
_, rc = _run_cmd(cmd, cmd_name, args)
File "/usr/lib/xen-4.1/bin/../lib/python/xen/xm/main.py", line 4007, in _run_cmd
return True, cmd(args)
File "<string>", line 1, in <lambda>
File "/usr/lib/xen-4.1/bin/../lib/python/xen/xm/main.py", line 1519, in xm_importcommand
cmd.main([command] + args)
File "/usr/lib/xen-4.1/bin/../lib/python/xen/xm/create.py", line 1562, in main
dom = make_domain(opts, config)
File "/usr/lib/xen-4.1/bin/../lib/python/xen/xm/create.py", line 1458, in make_domain
subprocess.call(['test.sh', domid])
File "/usr/lib/python2.7/subprocess.py", line 493, in call
return Popen(*popenargs, **kwargs).wait()
File "/usr/lib/python2.7/subprocess.py", line 679, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child
raise child_exception
TypeError: execv() arg 2 must contain only strings
我也想做和这篇文章一样的事情。 使用变量从python执行Shell脚本(使用变量我认为这意味着使用命令行参数)。
我做了以下工作以获得结果。 我正在分享以防其他人正在寻找相同的答案。
import os arglist = 'arg1 arg2 arg3' bashCommand = "/bin/bash script.sh " + arglist os.system(bashCommand)
这对我来说很好用。
我也,经过更多阅读后,它建议最好使用 subprocess.Popen,如果您想将结果返回用于显示目的。 我正在使用 bash 脚本将所有内容都记录到另一个文件中,所以我真的不需要子进程。
我希望它有帮助。
import os os.system("cat /root/test.sh") #!/bin/bash x='1' while [[ $x -le 10 ]] ; do echo $x: hello $1 $2 $3 sleep 1 x=$(( $x + 1 )) done arglist = 'arg1 arg2 arg3' bashCommand = 'bash /root/test.sh ' + arglist os.system(bashCommand) 1: hello arg1 arg2 arg3 2: hello arg1 arg2 arg3 3: hello arg1 arg2 arg3 4: hello arg1 arg2 arg3 5: hello arg1 arg2 arg3
要记住的简单解决方案:
import os
bashCommand = "source script.sh"
os.system(bashCommand)
您需要从您的 python 脚本以下列方式调用 shell 脚本:
subprocess.call(['test.sh', domid])
有关 subprocess 模块的文档,请参阅此处。 在上面的脚本中,我们将一个列表传递给call
方法,其中第一个元素是要执行的程序,列表中的其余元素是程序的参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.