微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 在后台执行子进程

我有一个python脚本,它接受一个输入,将其格式化为一个命令,调用服务器上的另一个脚本,然后使用子进程执行:

import sys, subprocess

thingy = sys.argv[1]

command = 'usr/local/bin/otherscript.pl {0} &'.format(thingy)
command_list = command.split()
subprocess.call(command_list)

我附加&到最后因为otherscript.pl需要一些时间来执行,我更喜欢在后台运行.但是,脚本似乎仍然执行而没有让我重新控制shell,我必须等到执行完成后才能回到我的提示符.有没有其他方法可以使用子进程在后台完全运行脚本?

解决方法:

&安培;是一个shell功能.如果您希望它与子进程一起使用,则必须指定shell = True,如:

subprocess.call(command, shell=True)

这将允许您在后台运行命令.

笔记:

>由于shell = True,以上使用命令,而不是command_list.
>使用shell = True启用所有shell的功能.除非包含thingy的命令来自您信任的来源,否则不要这样做.

更安全的选择

此替代方法仍允许您在后台运行该命令但是安全,因为它使用认的shell = False:

p = subprocess.Popen(command_list)

执行此语句后,该命令将在后台运行.如果要确保它已完成,请运行p.wait().

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐