Questions tagged «subprocess»

Python子进程模块允许您生成新进程,连接到它们的输入/输出/错误管道,并获取它们的返回代码。使用它来运行Shell命令或Python中的可执行文件。

15
子流程命令的实时输出
我正在使用python脚本作为流体力学代码的驱动程序。是时候运行模拟了,我subprocess.Popen用来运行代码,将stdout和stderr的输出收集到subprocess.PIPE---中,然后我可以打印(并保存到日志文件中)输出信息,并检查是否有错误。问题是,我不知道代码是如何进行的。如果直接从命令行运行它,它会向我输出有关它的迭代时间,时间,下一时间步长等的信息。 有没有办法既存储输出(用于日志记录和错误检查),又产生实时流输出? 我的代码的相关部分: ret_val = subprocess.Popen( run_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True ) output, errors = ret_val.communicate() log_file.write(output) print output if( ret_val.returncode ): print "RUN failed\n\n%s\n\n" % (errors) success = False if( errors ): log_file.write("\n\n%s\n\n" % errors) 最初,我是run_command通过管道传递数据,tee以便将副本直接发送到日志文件,并且流仍直接输出到终端-但是那样,我无法存储任何错误(据我所知)。 编辑: 临时解决方案: ret_val = subprocess.Popen( run_command, stdout=log_file, stderr=subprocess.PIPE, shell=True ) while not ret_val.poll(): log_file.flush() …

2
子流程Popen和call有什么区别(我该如何使用它们)?
我想从Python调用一个外部程序。我已经使用过Popen()并且call()做到了。 两者有什么区别? 我的特定目标是从Python运行以下命令。我不确定重定向如何工作。 ./my_script.sh > output 我阅读了文档,并说它call()是便利功能或快捷功能。我们使用call()代替会失去任何功能Popen()吗?
177 python  subprocess  popen 

3
OSError:[Errno 2]在Django中使用python子进程时,没有此类文件或目录
我正在尝试运行一个程序以使用Python代码在subprocess.call()其中进行一些系统调用,从而引发以下错误: Traceback (most recent call last): File "<console>", line 1, in <module> File "/usr/lib/python2.7/subprocess.py", line 493, in call return Popen(*popenargs, **kwargs).wait() File "/usr/lib/python2.7/subprocess.py", line 679, in __init__ errread, errwrite) File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child raise child_exception OSError: [Errno 2] No such file or directory 我的实际Python代码如下: url = "/media/videos/3cf02324-43e5-4996-bbdf-6377df448ae4.mp4" real_path …

17
使用子流程获取实时输出
我正在尝试为命令行程序(svnadmin verify)编写包装脚本,该脚本将显示该操作的良好进度指示器。这要求我能够立即看到包装程序输出的每一行。 我认为我只是使用subprocess.Popen,use 来执行程序stdout=PIPE,然后读取其中的每一行并据此进行操作。但是,当我运行以下代码时,输​​出似乎被缓冲在某处,导致它出现在两个块中,第1到332行,然后是333到439行(输出的最后一行) from subprocess import Popen, PIPE, STDOUT p = Popen('svnadmin verify /var/svn/repos/config', stdout = PIPE, stderr = STDOUT, shell = True) for line in p.stdout: print line.replace('\n', '') 在稍微了解一下子流程的文档之后,我发现了bufsize参数Popen,因此我尝试将bufsize设置为1(缓冲每行)和0(没有缓冲),但是两个值似乎都没有改变行的传递方式。 在这一点上,我开始精通吸管,因此编写了以下输出循环: while True: try: print p.stdout.next().replace('\n', '') except StopIteration: break 但是得到了相同的结果。 是否可以获取使用子进程执行的程序的“实时”程序输出?Python中还有其他向前兼容的选项(不是exec*)吗?
135 python  subprocess 

10
如何从Python异步运行外部命令?
我需要从Python脚本异步运行Shell命令。我的意思是,我希望我的Python脚本能够在外部命令关闭并继续执行所需操作的同时继续运行。 我读了这篇文章: 在Python中调用外部命令 然后我os.system()去做了一些测试,如果我&在命令末尾使用它,看起来就可以完成这项工作,这样我就不必等待它返回。我想知道的是,这是否是完成此任务的正确方法?我试过了,commands.call()但是对我来说不起作用,因为它会阻塞外部命令。 请告诉我是否os.system()建议这样做,或者我应该尝试其他方法。


3
如何使用子流程Popen Python
由于os.popen被subprocess.popen取代,我想知道如何转换 os.popen('swfdump /tmp/filename.swf/ -d') 到subprocess.popen() 我试过了: subprocess.Popen("swfdump /tmp/filename.swf -d") subprocess.Popen("swfdump %s -d" % (filename)) # NOTE: filename is a variable # containing /tmp/filename.swf 但是我想我没有正确地写出来。任何帮助,将不胜感激。谢谢
102 python  subprocess  popen 

8
子流程更改目录
我想在子目录/超级目录中执行脚本(我需要先在此子目录/超级目录中)。我无法subprocess进入子目录: tducin@localhost:~/Projekty/tests/ve$ python Python 2.7.4 (default, Sep 26 2013, 03:20:26) [GCC 4.7.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import subprocess >>> import os >>> os.getcwd() '/home/tducin/Projekty/tests/ve' >>> subprocess.call(['cd ..']) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib/python2.7/subprocess.py", line 524, …

5
如何在Python中使用子进程重定向输出?
我在命令行中执行的操作: cat file1 file2 file3 > myfile 我想用python做什么: import subprocess, shlex my_cmd = 'cat file1 file2 file3 > myfile' args = shlex.split(my_cmd) subprocess.call(args) # spits the output in the window i call my python program

2
如何将子流程调用传递到文本文件?
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"]) 现在,我有了运行的脚本。当我运行它并到达此行时,它开始打印内容,因为run.sh中有打印内容。 我如何也将其通过管道传输到文本文件?(如果可能,还可以打印)

4
为什么Popen.communicate()返回b'hi \ n'而不是'hi'?
有人可以解释为什么我想要的结果“ hi”以字母“ b”开头并以换行符结尾吗? 我正在使用Python 3.3 >>> import subprocess >>> print(subprocess.Popen("echo hi", shell=True, stdout=subprocess.PIPE).communicate()[0]) b'hi\n' 如果我使用python 2.7运行此额外的“ b”,则不会出现

13
从子进程实时捕获标准输出
我想subprocess.Popen()在Windows中使用rsync.exe,并在Python中打印标准输出。 我的代码可以运行,但是直到文件传输完成后才能捕获进度!我想实时打印每个文件的进度。 既然我听说使用Python 3.1,现在应该会更好地处理IO。 import subprocess, time, os, sys cmd = "rsync.exe -vaz -P source/ dest/" p, line = True, 'start' p = subprocess.Popen(cmd, shell=True, bufsize=64, stdin=subprocess.PIPE, stderr=subprocess.PIPE, stdout=subprocess.PIPE) for line in p.stdout: print(">>> " + str(line.rstrip())) p.stdout.flush()

7
从subprocess.communicate()读取流输入
我正在使用Pythonsubprocess.communicate()从运行约一分钟的进程中读取stdout。 如何stdout以流方式打印出该流程的每一行,以便可以看到生成的输出,但是仍然阻止该流程终止,然后再继续? subprocess.communicate() 似乎一次给出所有输出。

3
是否可以在子进程中运行功能而无需线程化或编写单独的文件/脚本。
import subprocess def my_function(x): return x + 100 output = subprocess.Popen(my_function, 1) #I would like to pass the function object and its arguments print output #desired output: 101 我只找到有关使用单独的脚本打开子流程的文档。有谁知道如何传递函数对象甚至是传递函数代码的简便方法?


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.