Articles of subprocess

从subprocess.Popenasynchronous读取标准输出

我正在使用subprocess.popen运行一个子程序。 当我从命令窗口(cmd.exe)启动我的Python程序时,随着程序的发展,程序会在窗口中写入一些信息和date。 当我不在命令窗口中运行我的Python代码时,它会为此子程序的输出打开一个新的命令窗口,我想避免这种情况。 当我使用下面的代码时,它不显示cmd窗口,但它也不打印状态: p = subprocess.Popen("c:/flow/flow.exe", shell=True, stdout=subprocess.PIPE) print p.stdout.read() 如何在程序输出中显示子程序的输出?

信号(SIGTERM)不被Windows上的subprocess接收

我有一个服务器,启动一个subprocess,我可以设法做一个send_signal(SIGTERM)这将杀死进程。 但不够优雅。 如果我从shell调用我的subprocess(即作为一个进程),定义的信号处理程序将踢入并正常退出。 server.py:(所以..从另一个脚本我第一次调用start_app() ,然后exit_app() def start_app(): app = subprocess.Popen("python app.py") def exit_app(): p = app.poll() if p==None: print("Subprocess is alive") # debug app.send_signal(signal.SIGTERM) app.py def exit_signal_handler(signal, frame): print("Terminate signal received") app.exit() if __name__ == '__main__': app = QApplication(sys.argv) signal.signal(signal.SIGTERM, exit_signal_handler) signal.signal(signal.SIGINT, exit_signal_handler) sys.exit(app.exec()) 再次,如果我从shell调用app.py并发送一个SIGTERM信号,我会Terminate signal received跟踪Terminate signal received并closures应用程序。 但是,当app.py由服务器启动,我打电话exit_app服务器中的exit_app ,我得到一个跟踪Subprocess is alive (从server.py),应用程序被杀害,但信号不捕获应用程序的signalhandler exit_signal_handler […]

用subprocess包装cmd.exe

我尝试用下面的程序包装Windows下的cmd.exe,但它不起作用,似乎等待的东西,并没有显示任何东西。 任何想法这里有什么不对? import subprocess process = subprocess.Popen('cmd.exe', shell=False, stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=None) process.stdin.write("dir\r\n") output = process.stdout.readlines() print output

将可能包含非ASCII字符的poweshell输出解码为一个pythonstring

我需要解码从python调用powershell标准输出到一个pythonstring。 我的最终目标是获取一个string列表的forms在Windows中的networking适配器的名称。 我目前的function看起来像这样,并在Windows 10英语语言运行良好: def get_interfaces(): ps = subprocess.Popen(['powershell', 'Get-NetAdapter', '|', 'select Name', '|', 'fl'], stdout = subprocess.PIPE) stdout, stdin = ps.communicate(timeout = 10) interfaces = [] for i in stdout.split(b'\r\n'): if not i.strip(): continue if i.find(b':')<0: continue name, value = [ j.strip() for j in i.split(b':') ] if name == b'Name': interfaces.append(value.decode('ascii')) # This […]

如何在Python中使用dir / s命令?

背景 我一直在batch file中使用命令dir/s 。 但是,我无法使用python来调用它。 注意:我正在使用Python 2.7.3。 码 import subprocess subprocess.call(["dir/s"]) 错误信息 Traceback (most recent call last): File "<pyshell#2>", line 1, in <module> subprocess.call(["dir/s"]) File "C:\Python27\lib\subprocess.py", line 493, in call return Popen(*popenargs, **kwargs).wait() File "C:\Python27\lib\subprocess.py", line 679, in __init__ errread, errwrite) File "C:\Python27\lib\subprocess.py", line 896, in _execute_child startupinfo) WindowsError: [Error 2] The system cannot find […]

在Windows上的Pythonsubprocess输出?

我遇到了一些困难从一个subprocess标准输出pipe道输出。 我正在通过它启动一些第三方代码,以提取日志输出。 直到最近更新的第三方代码,一切正常。 更新之后,python已经无限期地开始阻塞了,并没有实际显示任何输出。 我可以手动启动第三方应用程序罚款,看到输出。 我正在使用的代码的基本版本: import subprocess, time from threading import Thread def enqueue_output(out): print "Hello from enqueue_output" for line in iter(out.readline,''): line = line.rstrip("\r\n") print "Got %s" % line out.close() proc = subprocess.Popen("third_party.exe", stdout=subprocess.PIPE, bufsize=1) thread = Thread(target=enqueue_output, args=(proc.stdout,)) thread.daemon = True thread.start() time.sleep(30) 如果我用这个脚本replacethird_party.exe,这个效果很好: import time, sys while True: print "Test" sys.stdout.flush() […]

无法写入到subprocess中的标准input

我无法将命令传递给python 3.2.5中的stdin。 我已经尝试了以下两种方法另外:这个问题是前一个问题的延续。 from subprocess import Popen, PIPE, STDOUT import time p = Popen([r'fileLoc/uploader.exe'],shell = True, stdout=PIPE, stdin=PIPE, stderr=STDOUT) p.stdin.write('uploader -i file.txt -d outputFolder\n') print (p.communicate()[0]) p.stdin.close() 当我尝试在IDLE解释器中的代码,以及从print (p.communicate()[0])等错误时,我也得到数字,如print (p.communicate()[0])返回给我 Traceback (most recent call last): File "<pyshell#132>", line 1, in <module> p.communicate()[0] File "C:\Python32\lib\subprocess.py", line 832, in communicate return self._communicate(input) File "C:\Python32\lib\subprocess.py", line 1060, in […]

用VLC播放video文件,然后退出VLC

我正在研究一个简单的Python脚本,它应该可以做些什么,然后播放一个video文件,然后做更多的事情。 我不得不在Windows XP机器上用Python 3.2.3和VLC来播放我的video文件。 我目前正在使用这个代码… vlc_path = '\\path\\to\\vlc.exe' video_path = '\\path\\to\\video\\file' subprocess.call([vlc_path, video_path]) 打开VLC并播放video 它很好地工作。 但是,脚本在继续之前等待VLC退出。 这是好的,我想保持这种方式。 我的问题是: 是否有一种方法可以在video文件播放后立即退出VLC? 非常感谢您的帮助!

在一个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?

如何发送控件C node.js和child_processes

你好我想发送到child_process,例如,ping 8.8.8.8-t,也就是无限次的ping。 而一些迭代我想停止这个命令并执行一个新的,但在这种情况下,我不想杀死一个subprocess。 例: var spawn = require('child_process').spawn('cmd'), iconv = require('iconv-lite'); spawn.stdout.on('data', function (data) { console.log('Stdout: ', iconv.decode(data, 'cp866')); }); spawn.stderr.on('data', function (data) { console.log('Stderr: ', iconv.decode(data, 'cp866')); }); spawn.stdin.write('ping 8.8.8.8 -t'+ '\r\n'); spawn.stdin.write(here control-c…); // WRONG spawn.stdin.write('dir' + '\r\n');