微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在一个Windows命令提示符下按顺序运行多个程序?

我需要依次运行多个程序,并且每个程序都在控制台窗口中运行。 我希望控制台窗口可见,但是为每个程序创build一个新窗口。 这很烦人,因为在Eclipse中工作时,每个窗口都从另一个窗口closures的位置打开并窃取焦点。

这是我正在使用的初始代码

def runcommand( self,cmd,instream=None,outstream=None,errstream=None ): proc = subprocess.Popen( cmd,stdin=instream,stdout=outstream,stderr=errstream ) while True: retcode = proc.poll() if retcode == None: if mAbortBuild: proc.terminate() return False else: time.sleep(1) else: if retcode == 0: return True else: return False

调用subprocess.Popen然后调用proc.stdin.write(b'program.exe r n')时,我切换到使用'cmd'打开命令提示符。 这似乎解决一个命令窗口的问题,但现在我不知道什么时候第一个程序完成,我可以开始第二个。 在运行第二个程序之前,我想停止并询问第一个程序的日志文件

任何提示如何我可以做到这一点? 有没有find另一个选项在一个窗口中运行程序,我还没有find?

将文本光标移动到特定的屏幕坐标?

如何判断是否在Linux控制台运行与ssh会话?

回去在Linux控制台中的一条线?

通过subprocess发送一个钩子捕获消息到控制台是可能的吗?

Go编译器有一个窗口设置选项吗?

使用python启动用chcp 65001预先激活的控制台窗口

保存到Excel文件导致在C#窗口中的错误

PHP5压缩文件.zip

这个C声明代码有什么问题?

如何更改命令提示符/控制台窗口/ DOS框中的制表符?

由于您使用的是Windows,因此您可以创建一个批处理文件,列出要运行的每个程序,这些程序都将在单个控制台窗口中执行。 由于是批处理脚本,因此可以像在示例中所示的那样执行诸如放置条件语句之类的操作。

import os import subprocess import textwrap # create a batch file with some commands in it batch_filename = 'commands.bat' with open(batch_filename,"wt") as batchfile: batchfile.write(textwrap.dedent(""" python hello.py if errorlevel 1 ( @echo non-zero exit code: %errorlevel% - terminating exit ) time /t date /t """)) # execute the batch file as a separate process and echo its output kwargs = dict(stdout=subprocess.PIPE,stderr=subprocess.STDOUT,universal_newlines=True) with subprocess.Popen(batch_filename,**kwargs).stdout as output: for line in output: print line,try: os.remove(batch_filename) # clean up except os.error: pass

在第17.5.3.1节。 子进程模块文档中的常量有subprocess.CREATE_NEW_CONSOLE常量的描述 :

新进程有一个新的控制台,而不是继承其父控制台(认)。

正如我们所看到的,认情况下,新进程会继承父进程的控制台。 您观察到多个控制台被打开的原因是,您从Eclipse内部调用脚本,而本身没有控制台,所以每个子过程都会创建自己的控制台,因为没有可以继承的控制台。 如果有人想要模拟这种行为,那么运行Python脚本就足够了,该脚本使用pythonw.exe而不是python.exe来创建子进程 。 两者的区别在于前者不打开控制台,后者则打开控制台。

解决方法是使用助手脚本 – 我们称之为启动程序 – 认情况下,创建控制台并在子进程中运行程序。 这样,每个程序都从其父 – 启动程序继承一个相同的控制台。 要按顺序运行程序,我们使用Popen.wait()方法

— script_run_from_eclipse.py —

import subprocess import sys subprocess.Popen([sys.executable,'helper.py'])

— helper.py —

import subprocess programs = ['first_program.exe','second_program.exe'] for program in programs: subprocess.Popen([program]).wait() if input('Do you want to continue? (y/n): ').upper() == 'N': break

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐