Questions tagged «subprocess»

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


16
运行shell命令并捕获输出
我想编写一个函数,它将执行shell命令并以字符串形式返回其输出,无论它是错误还是成功消息。我只想获得与命令行相同的结果。 能做到这一点的代码示例是什么? 例如: def run_command(cmd): # ?????? print run_command('mysqladmin create test -uroot -pmysqladmin12') # Should output something like: # mysqladmin: CREATE DATABASE failed; error: 'Can't create database 'test'; database exists'
905 python  shell  subprocess 

30
在Python中对子进程进行非阻塞读取
我正在使用子流程模块来启动子流程并连接到其输出流(stdout)。我希望能够在其stdout上执行非阻塞读取。有没有一种方法可以使.readline无阻塞或在调用之前检查流中是否有数据.readline?我希望这是可移植的,或者至少要在Windows和Linux下工作。 这是我目前的操作方式(.readline如果没有可用数据,则会阻塞): p = subprocess.Popen('myprogram.exe', stdout = subprocess.PIPE) output_str = p.stdout.readline()

29
将模块“子进程”与超时一起使用
Наэтотвопросестьответына 堆栈溢出нарусском:Прерываниепроцессаизадержканаисполнение 这是运行任意命令以返回其stdout数据或在非零退出代码上引发异常的Python代码: proc = subprocess.Popen( cmd, stderr=subprocess.STDOUT, # Merge stdout and stderr stdout=subprocess.PIPE, shell=True) communicate 用于等待进程退出: stdoutdata, stderrdata = proc.communicate() 该subprocess模块不支持超时-可以杀死运行时间超过X秒的进程-因此,communicate可能需要永远运行。 在打算在Windows和Linux上运行的Python程序中实现超时的最简单方法是什么?

11
如何终止以shell = True启动的python子进程
我正在使用以下命令启动子流程: p = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True) 但是,当我尝试杀死使用: p.terminate() 要么 p.kill() 该命令一直在后台运行,所以我想知道如何才能真正终止该过程。 请注意,当我使用以下命令运行命令时: p = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE) 发出时,它确实成功终止p.terminate()。

15
将subprocess.Popen调用的输出存储在字符串中
我正在尝试在Python中进行系统调用,并将输出存储到我可以在Python程序中操作的字符串中。 #!/usr/bin/python import subprocess p2 = subprocess.Popen("ntpq -p") 我尝试了一些事情,包括此处的一些建议: 检索subprocess.call()的输出 但没有任何运气。
300 python  subprocess 

8
具有修改后环境的Python子进程/ Popen
我认为在环境稍有修改的情况下运行外部命令是很常见的情况。这就是我倾向于这样做的方式: import subprocess, os my_env = os.environ my_env["PATH"] = "/usr/sbin:/sbin:" + my_env["PATH"] subprocess.Popen(my_command, env=my_env) 我感觉到有更好的方法了。看起来还好吗?
284 python  subprocess  popen 

5
如何在Python 2.7中隐藏子进程的输出
我在Ubuntu上使用eSpeak,并且有一个Python 2.7脚本可以打印和显示一条消息: import subprocess text = 'Hello World.' print text subprocess.call(['espeak', text]) eSpeak产生所需的声音,但由于一些错误(ALSA lib ...,没有套接字连接)而使外壳混乱,因此我无法轻松读取之前打印的内容。退出代码为0。 不幸的是,没有记录的选项可以关闭其详细信息,因此我正在寻找一种方法,仅在视觉上使其静音并保持打开的外壳干净以进行进一步的交互。 我怎样才能做到这一点?

11
如何将字符串传递到subprocess.Popen(使用stdin参数)?
如果我执行以下操作: import subprocess from cStringIO import StringIO subprocess.Popen(['grep','f'],stdout=subprocess.PIPE,stdin=StringIO('one\ntwo\nthree\nfour\nfive\nsix\n')).communicate()[0] 我得到: Traceback (most recent call last): File "<stdin>", line 1, in ? File "/build/toolchain/mac32/python-2.4.3/lib/python2.4/subprocess.py", line 533, in __init__ (p2cread, p2cwrite, File "/build/toolchain/mac32/python-2.4.3/lib/python2.4/subprocess.py", line 830, in _get_handles p2cread = stdin.fileno() AttributeError: 'cStringIO.StringI' object has no attribute 'fileno' 显然,cStringIO.StringIO对象没有足够接近库中的子程序来适应subprocess.Popen。我该如何解决?
280 python  subprocess  stdin 

5
子过程中“ shell = True”的实际含义
我正在使用该subprocess模块调用不同的进程。但是,我有一个问题。 在以下代码中: callProcess = subprocess.Popen(['ls', '-l'], shell=True) 和 callProcess = subprocess.Popen(['ls', '-l']) # without shell 两者都可以。阅读文档后,我知道这shell=True意味着通过外壳执行代码。因此,这意味着在不存在的情况下,该过程将直接启动。 因此,对于我的情况,我更喜欢什么-我需要运行一个流程并获取其输出。从外壳内部或外部调用它有什么好处。
260 python  subprocess 


9
逐行读取子流程标准输出
我的python脚本使用子进程来调用非常嘈杂的linux实用程序。我想将所有输出存储到日志文件中,并向用户显示其中的一些内容。我以为下面的方法可以工作,但是直到实用程序产生大量输出后,输出才出现在我的应用程序中。 #fake_utility.py, just generates lots of output over time import time i = 0 while True: print hex(i)*512 i += 1 time.sleep(0.5) #filters output import subprocess proc = subprocess.Popen(['python','fake_utility.py'],stdout=subprocess.PIPE) for line in proc.stdout: #the real code does filtering here print "test:", line.rstrip() 我真正想要的行为是过滤器脚本打印从子流程接收到的每一行。Sorta像是做什么tee,但带有python代码。 我想念什么?这有可能吗? 更新: 如果将a sys.stdout.flush()添加到fake_utility.py中,则代码在python 3.1中具有所需的行为。我正在使用python 2.6。您可能会认为使用proc.stdout.xreadlines()与py3k相同,但事实并非如此。 更新2: …
235 python  subprocess 

13
在进程运行时不断打印子进程输出
为了从我的Python脚本启动程序,我使用以下方法: def execute(command): process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) output = process.communicate()[0] exitCode = process.returncode if (exitCode == 0): return output else: raise ProcessException(command, exitCode, output) 因此,当我启动像这样的过程时Process.execute("mvn clean install"),我的程序将等待直到该过程完成为止,然后我才能获得程序的完整输出。如果我正在运行需要一段时间才能完成的过程,这将很烦人。 我可以让我的程序通过在循环完成之前轮询过程输出来逐行写过程输出吗? ** [编辑]对不起,发布此问题之前,我搜索得并不好。线程实际上是关键。在此处找到了一个示例,该示例演示了如何执行此操作:** 从线程中获取Python Subprocess.Popen
201 python  subprocess 

1
如何为Popen指定工作目录
有没有一种方法可以在Python的目录中指定命令的运行目录subprocess.Popen()? 例如: Popen('c:\mytool\tool.exe', workingdir='d:\test\local') 我的Python脚本位于 C:\programs\python 是否可以C:\mytool\tool.exe在目录中运行D:\test\local? 如何设置子流程的工作目录?
186 python  subprocess  popen 


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.