如何在python 2.7中使用子进程来触发和忘记

时间:2015-01-28 22:02:42

标签: python

我需要在python 2.7中的bakground中执行命令行。我需要解雇并忘记。

这是命令:

cmd = "/usr/local/bin/fab -H %s aws_bootstrap initial_chef_run:%s,%s,%s -w" % (...)

如何使用子流程模块?

e.g。是吗

subprocess.call([cmd])

or 

subprocess.call(["/usr/local/bin/fab", "-H %s aws_bootstrap initial_chef_run:%s,%s,%s -w"])

我不知道如何使用该列表。或者列表中的每个元素都是一个空格。

由于

3 个答案:

答案 0 :(得分:2)

每个由空格分隔的东西都是列表的单独实体

然而,

subprocess.call正在阻止 subprocess.popen是非阻止的

cmd = ["/usr/local/bin/fab", "-H",var1,"aws_bootstrap initial_chef_run:%s,%s,%s"%(var2,var3,var4), "-w"]

subprocess.popen(cmd)  # dopnt wait just keep going
#or
subprocess.call(cmd)  # wait until the command returns
但是,您可以将命令作为一个大字符串传递

cmd = "/usr/local/bin/fab -H %s aws_bootstrap initial_chef_run:%s,%s,%s -w" % (...)
subprocess.call(cmd)

一般来说,这个方法(传递单个字符串)由于某种原因而不受欢迎,这个原因从未被充分解释过我

答案 1 :(得分:0)

我最近使用它来激活perl脚本,如下所示:

    var = "C:\Users\user\Desktop"
    retcode = subprocess.call(["perl", '.\hgncDL.pl',var])

答案 2 :(得分:0)

工作代码

在以下代码中定义hParamrunParams,您就可以了:

hParam = 'hParam'
runParams = (a,b,c)
args = ('/usr/local/bin/fab', '-H', hParam, 'aws_bootstrap', 'initial_chef_run:%s,%s,%s' % runParams, '-w')
subprocess.Popen(args)

详细

  1. 如何使用<any python module>模块?

    https://docs.python.org是一个很好的起点 特别是,subprocess模块的文档可用here
    由于低声誉造成的限制,我无法在此答案的后面为每个案例提供直接链接。每次我将引用&#39; docs&#39;时,请在模块的文档中查找。

  2. 我需要在python 2.7的后台执行一个命令行。我需要解雇并忘记
    考虑subprocess.Popen(args)。注意资本&#39; P&#39;。 有关详细信息,请参阅文档
    subprocess.call(args)以类似的方式工作,但它会阻塞,直到命令完成。如文档中所述:

      

    运行args描述的命令。 等待命令完成,然后返回returncode属性。

  3. 如何使用args参数的序列形式?

    这包含在&#34;经常使用的参数&#34;文档部分:

      

    所有调用都需要args,它应该是一个字符串或一系列程序参数。通常优选提供一系列自变量,因为它允许模块处理任何所需的转义和引用参数(例如,允许文件名中的空格)。

    此外,以字符串形式传递args有其局限性:

      

    如果传递单个字符串,则shell必须为True,否则字符串必须简单地命名要执行的程序而不指定任何参数。

    尽管有上述限制,subprocess.Popen('cmd.exe /?')对我有用。 Win7,Python 2.7.8 64位。

  4. HTH,欢呼。