2017-04-26 82 views
0

有没有办法在另一个shell中重启另一个脚本? 我有脚本,有时等待从Gmail和IMAP读取电子邮件。从另一个脚本我想重新启动主之一,但不停止我已经尝试了第二 的执行:Python在另一个cmd窗口中重启脚本

os.system("C:\Users\light\Documents\Python\BOTBOL\Gmail\V1\send.py") 
process = subprocess.Popen(["python", "C:\Users\light\Documents\Python\BOTBOL\Gmail\V1\send.py"]) 

但都跑在第二的外壳 编辑主: 对不起,外壳我的意思终端窗口

+0

你是什么意思*在另一个shell *?我知道什么进程和线程,我知道什么是外壳,也是一个终端窗口,但我不明白是什么意思*在另一个外壳*启动另一个脚本... ... –

+0

终端窗口,对不起 – LORMILAN

回答

0

在您最后的评论和语法显示您正在使用Windows之后,我假设您想在另一个控制台中启动Python脚本。如果你想要启动与新的并行执行,这里的魔术字是START,如果你想等待子进程的结束,那么START /W

在你的情况,你可以使用:

subprocess.call(["cmd.exe", "/c", "START", "C:\Path\To\PYTHON.EXE", 
    "C:\Users\light\Documents\Python\BOTBOL\Gmail\V1\send.py"]) 
+0

似乎工作,谢谢 – LORMILAN

0

子进程有一个叫做shell的选项,它是你想要的。 Os调用被阻塞,这意味着只有在命令完成后,解释器才会移到下一行。另一方面,子进程popens是非阻塞的,但是这两个命令都会从运行此代码的进程中产生子进程。如果您想在shell中运行并获取访问shell功能来执行此操作,请在子进程中尝试shell = True。

+0

嗨,谢谢,但我使用了: – LORMILAN

+0

subprocess.Popen([“C:\ Users \ light \ Documents \ Python \ BOTBOL \ Gmail \ V1 \ send.py”],shell = True) – LORMILAN

+0

仍在同一个shell中 – LORMILAN

0

我可以尝试,并解释你所需要的一切,但我认为这部影片会做的更好:Youtube Video about multithreading

这将允许您运行两件事情FE 在登记电子邮件中有一个运行,另一个在输入上运行,所以它不会在那些时刻停下来,并且可以做多个“上架”,因为它们是平行的。

如果你真的想为此有一个不同的窗口,我很抱歉,我不能帮助。

希望这是你正在寻找。

+0

我试过了,(可能还不够) ,但似乎它仍然等待第一个线程完成之前开始第二个(也许即时通讯错误) – LORMILAN

+0

它应该使用2个线程,但你会有一个主要和另一个在def。 – Stijn