繁体   English   中英

使用变量从python执行shell脚本

[英]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

像这样 ?

subprocess.call(['test.sh', str(domid)])

文档可在python 网站上找到

我也想做和这篇文章一样的事情。 使用变量从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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM