我正在尝试使用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
答案 0 :(得分:2)
如果您使用shell=True
pid,您将获得已启动shell的pid,而不是您想要的进程,特别是当您使用&
将进程发送到后台时。
你应该使用提供参数的长(列表)形式,而不是&
,因为如果你将它与输出重定向结合起来,那就毫无意义了。
答案 1 :(得分:1)
不要使用shell,而只需使用
subprocess.Popen(['firefox'], stdout=subprocess.PIPE, preexec_fn=os.setsid)
但是,如果firefox已经运行,那么这也不会起作用,因为在这种情况下,firefox将使用一些IPC告诉现有进程打开一个新窗口然后终止。