【问题标题】:Run python file from an other python file从其他 python 文件运行 python 文件
【发布时间】:2020-07-17 12:54:23
【问题描述】:

我在同一个目录中有两个 python 文件。

文件 1: ma​​in.py

import time
import threading
from subprocess import call

def thread_second():
    call(["python", "python_test.py"])
processThread = threading.Thread(target=thread_second)  # <- note extra ','
processThread.start()

time.sleep(2)

print ('the file is running in the background')

print('exit main')

文件 2: secondary.py

import time
import os

try:
    file = open("runnnig.tmp","x")
    file.close()
except Exception as FileExistsError:
     print('file already exists')

print('Secondary file is running')

# do some staff 
time.sleep(10)

我想要完成的是从 main.py 运行 secondary.py。只有一个问题我希望 secondary.py 完全独立于 main.py 运行,以便在打开 secondary.pymain.py 退出。有了这个解决方案,我发现here secondary.py 开始正常运行,但 main.py 挂起直到 secondary.py退出。我怎样才能做到这一点?


PS。对于任何想知道我要做什么的人

我有一个在 Raspberry pi 上运行的 node.js 服务器。当向服务器发出请求时,从服务器调用 main.pysecondary.py 是一个脚本,它告诉 raspberry 开始记录来自传感器的值。 secondary.py 将运行一个无限循环,直到另一个脚本中断它。这就是为什么我不希望 main.pysecondary.py 退出之前挂起

【问题讨论】:

  • 您可以使用nohup &lt;cmd&gt; &amp; 分离子进程并在后台运行它。不需要main.py 中的线程。
  • @0x5453 我怎样才能从 main.py 做到这一点?关于nohup,我所能找到的只是如何从终端运行脚本。我想要的是从 main.py 中“调用”脚本

标签: python python-3.x


【解决方案1】:

您不需要线程,并且使用Popen 而不是call 意味着您的main.py 不会等待新进程结束。

import time
from subprocess import Popen

Popen(["python", "python_test.py"])

time.sleep(2)

print ('the file is running in the background')

print('exit main')

【讨论】:

  • 只有一个问题很好用。有什么办法可以在控制台看到secondary.py的输出?
  • 您应该能够使用 stdout 参数来执行此操作 Popen: docs.python.org/3/library/… 对于长时间运行的进程,将其发送到文件可能是个好主意,这样您就可以使用类似tail -f 的命令进行检查
最近更新 更多