gpt4 book ai didi

python - 如何从 python 脚本调用 python 脚本

转载 作者:太空狗 更新时间:2023-10-29 21:58:43 25 4
gpt4 key购买 nike

我有一个 python 脚本“b.py”,它每 5 秒打印一次时间。

while (1):
print "Start : %s" % time.ctime()
time.sleep( 5 )
print "End : %s" % time.ctime()
time.sleep( 5 )

在我的 a.py 中,我通过以下方式调用 b.py:

def run_b():
print "Calling run b"
try:
cmd = ["./b.py"]

p = subprocess.Popen(cmd,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)

for line in iter(p.stdout.readline, b''):
print (">>>" + line.rstrip())


except OSError as e:
print >>sys.stderr, "fcs Execution failed:", e

return None

然后,我通过以下方式杀死“b.py”: PS_PATH = "/usr/bin/ps -efW"

def kill_b(program):
try:

cmd = shlex.split(PS_PATH)

retval = subprocess.check_output(cmd).rstrip()
for line in retval.splitlines():

if program in line:
print "line =" + line
pid = line.split(None)[1]
os.kill(int(pid), signal.SIGKILL)

except OSError as e:
print >>sys.stderr, "kill_all Execution failed:", e
except subprocess.CalledProcessError as e:
print >>sys.stderr, "kill_all Execution failed:", e

run_b()
time.sleep(600)
kill_b("b.py")

我有两个问题。1. 为什么我看不到“b.py”的任何打印结果,而当我执行“ps -efW”时我没有看到名为“b.py”的进程?2. 为什么当我终止上述进程时,我看到“权限被拒绝”?

我在 windows 下的 cygwin 上运行上面的脚本。

谢谢。

最佳答案

  1. 为什么我看不到“b.py”的任何打印结果,而当我执行“ps -efW”时我没有看到名为“b.py”的进程?

    更改 run_b() 行:

    p = subprocess.Popen(cmd,
    stdout=sys.stdout,
    stderr=sys.stderr)

    您不会看到名为“b.py”的进程,而是类似“python b.py”的进程,两者略有不同。您应该使用 pid 而不是名称来查找它(在您的代码中,“p.pid”具有 pid)。

  2. 为什么当我终止上述进程时,我看到“权限被拒绝”?

    os.kill 仅在 Windows 2.7+ 下受支持,其行为与 posix 版本略有不同。但是你可以使用“p.pid”。以跨平台方式终止进程的最佳方法是:

    if platform.system() == "Windows":
    subprocess.Popen("taskkill /F /T /PID %i" % p.pid, shell=True)
    else:
    os.killpg(p.pid, signal.SIGKILL)

killpg 也适用于 OS X 和其他 Unixy 操作系统。

关于python - 如何从 python 脚本调用 python 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18366517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com