使用子进程模块从Python执行命令行命令

时间:2013-04-12 21:13:30

标签: python linux

我正在尝试使用python中的subprocess module并尝试获取process id的{​​{1}}

firefox

我想我正在执行我正在执行的命令行参数的cmd = "firefox &" fire = subprocess.Popen(cmd,shell=True, stdout=subprocess.PIPE, preexec_fn=os.setsid) fire_task_procs = find_task(fire.pid) print "fire_task_procs",fire_task_procs ..我做错了什么? 我确认使用pid

是不一样的

2 个答案:

答案 0 :(得分:2)

如果您使用shell=True pid,您将获得已启动shell的pid,而不是您想要的进程,特别是当您使用&将进程发送到后台时。

你应该使用提供参数的长(列表)形式,而不是&,因为如果你将它与输出重定向结合起来,那就毫无意义了。

答案 1 :(得分:1)

不要使用shell,而只需使用

subprocess.Popen(['firefox'], stdout=subprocess.PIPE, preexec_fn=os.setsid)

但是,如果firefox已经运行,那么这也不会起作用,因为在这种情况下,firefox将使用一些IPC告诉现有进程打开一个新窗口然后终止。