python执行shell命令并在不等待的情况下继续,并在执行之前检查是否正在运行

python执行shell命令并在不等待的情况下继续,并在执行之前检查是否正在运行,python,shell,command-line,Python,Shell,Command Line,我需要从另一个python脚本执行另外两个python脚本。 命令如下所示: #python send.py #python wait.py 这将在一个循环中发生,该循环将休眠1分钟,然后重新运行 在执行启动其他脚本的命令之前,我需要确保它们尚未运行。您可以使用来执行此操作,例如: import subprocess command1 = subprocess.Popen(['command1', 'args1', 'arg2']) command2 = subprocess.Popen(['

我需要从另一个python脚本执行另外两个python脚本。 命令如下所示:

#python send.py

#python wait.py

这将在一个循环中发生,该循环将休眠1分钟,然后重新运行

在执行启动其他脚本的命令之前,我需要确保它们尚未运行。

您可以使用来执行此操作,例如:

import subprocess

command1 = subprocess.Popen(['command1', 'args1', 'arg2'])
command2 = subprocess.Popen(['command2', 'args1', 'arg2'])
如果需要检索输出,请执行以下操作:

command1.wait()
print command1.stdout
运行示例:

sleep = subprocess.Popen(['sleep', '60'])
sleep.wait()
print sleep.stdout  # sleep outputs nothing but...
print sleep.returncode  # you get the exit value


这本可以写得更好一点,但效果更好。

您是否尝试过使用子流程模块?为什么您不能
导入这两个脚本并正常调用其中的函数?因为这两个应用程序在某个时候将以不同的语言重写。子流程似乎要等待应用程序完成后才能继续。我只需要执行并继续。@larsmans,如果您不明确使用
Popen
stdout
只有在
stdout=subprocess.PIPE
传递给
Popen
构造函数时才有意义。
import time
import commands
from subprocess import Popen

while True:
  t_ph = commands.getstatusoutput('ps -eo pid,args | grep script1.py | grep -v service | grep -v init.d | grep -v grep | cut -c1-6')
  t_fb = commands.getstatusoutput('ps -eo pid,args | grep script2.py | grep -v service | grep -v init.d | grep -v grep | cut -c1-6')

  if t_ph[1] == '':
    r_ph = Popen(["python", "script1.py"])

  if t_fb[1] == '':
    r_fb = Popen(["python", "script2.py"])

  time.sleep(60)
import time
import commands
from subprocess import Popen

r_ph = False
r_fb = False

while True:

  if r_ph == False:
    r_ph = Popen(["python", "script1.py"])
  else:
    if r_ph.poll():
      r_ph = Popen(["python", "script1.py"])

  if r_fb == False:
    r_fb = Popen(["python", "script2.py"])
  else:
    if r_fb.poll():
      r_fb = Popen(["python", "script2.py"])

  time.sleep(60)