我有两个Python文件,文件1和文件2,它们分别执行两个操作。我想一起运行。我正在使用VS2017
文件1的伪代码为:
Class A:
foo1():
.
.
foo2();
if variable<30;
#do this
else;
subprocess.Popen('py file2.py')
#rest of the code for foo2()
if __name__ == "__main__":
A.foo2();
当前,当我使用这种格式时,子进程确实会启动文件2并运行该文件,但是if-else条件之后的foo2()其余代码仅在该进程终止时运行(我已经设置的另一个条件)内部文件2)。
我正在尝试以某种方式工作,一旦满足if-else条件,文件2将在后台开始运行,并且将在命令窗口中提供输出,但也将运行文件1的其余部分。暂停文件1的运行,直到文件2完成。如果不在子进程中,则还有另一种方法可以同时启动两个文件,但可以通过传递“变量”的值来控制文件2的输出。我正在尝试找到适当的解决方法。
我是Python的新手。
编辑1:
我使用了命令:
process = subprocess.Popen('py file2.py' ,shell=True,stdin=None, stdout=None, stderr=None, close_fds=True)
即使我使用process.kill(),子进程仍然在后台运行。即使使用任务管理器也不会退出。
我还想将变量传递给第二个文件。我正在研究
variable = input("enter variable)
subprocess.Popen('py file2.py -a' + variable ,shell=True,stdin=None, stdout=None, stderr=None, close_fds=True)
但是据我所知,我只能通过子进程传递字符串。是真的吗?
答案 0 :(得分:0)
我相信您可以同时使用多线程和多处理。如果要立即启动它们并监视变量,则可以将它们与管道或队列连接。
在触发时启动:
from py_file2.py import your_func
import threading
Class A:
foo1():
.
.
foo2();
if variable<30;
#do this
else;
#put something here to make sure it only starts once
t = threading.Thread(target = your_func)
t.start()
#rest of the code for foo2()
if __name__ == "__main__":
A.foo2();
立即开始:
from py_file2.py import your_func
import threading
from queue import Queue
Class A:
foo1():
.
.
foo2(your_queue);
if variable<30;
#do this
else;
your_queue.put(variable)
#rest of the code for foo2()
if __name__ == "__main__":
your_queue = Queue()
t = threading.Thread(target = your_func, args = (your_queue,))
t.start()
A.foo2(your_queue);