标签: subprocess

Python popen命令.等到命令完成

我有一个脚本,我用popen启动一个shell命令.问题是脚本不会等到popen命令完成后立即继续.

om_points = os.popen(command, "w")
.....
Run Code Online (Sandbox Code Playgroud)

如何判断我的Python脚本要等到shell命令完成?

python subprocess popen wait

65
推荐指数
6
解决办法
13万
查看次数

使用子进程时如何在Python中复制tee行为?

我正在寻找一种Python解决方案,它允许我将命令的输出保存在文件中,而不会将其从控制台中隐藏.

仅供参考:我问的是tee(作为Unix命令行实用程序)而不是Python intertools模块中具有相同名称的函数.

细节

  • Python解决方案(不调用tee,在Windows下不可用)
  • 我不需要为被调用进程的stdin提供任何输入
  • 我无法控制被叫程序.我所知道的是它会向stdout和stderr输出一些内容并返回退出代码.
  • 在调用外部程序时工作(子进程)
  • 为两者stderr而努力stdout
  • 能够区分stdout和stderr,因为我可能只想显示一个控制台,或者我可以尝试使用不同的颜色输出stderr - 这意味着stderr = subprocess.STDOUT不起作用.
  • 实时输出(渐进式) - 该过程可以运行很长时间,我无法等待它完成.
  • Python 3兼容代码(重要)

参考

以下是我发现的一些不完整的解决方案:

图http://blog.i18n.ro/wp-content/uploads/2010/06/Drawing_tee_py.png

当前代码(第二次尝试)

#!/usr/bin/python
from __future__ import print_function

import sys, os, time, subprocess, io, threading
cmd = "python -E test_output.py"

from threading import Thread
class StreamThread ( Thread ):
    def __init__(self, buffer):
        Thread.__init__(self)
        self.buffer = buffer
    def run ( self ):
        while 1:
            line = self.buffer.readline()
            print(line,end="") …
Run Code Online (Sandbox Code Playgroud)

python subprocess stdout stderr tee

64
推荐指数
4
解决办法
2万
查看次数

为什么Popen.communicate()返回b'hi \n'而不是'hi'?

有人可以解释为什么我想要的结果,"嗨",前面有一个字母'b',后跟一个换行符?

我使用的是Python 3.3

>>> import subprocess
>>> print(subprocess.Popen("echo hi", shell=True,
                           stdout=subprocess.PIPE).communicate()[0])
b'hi\n'
Run Code Online (Sandbox Code Playgroud)

如果我用python 2.7运行它,则不会出现这个额外的'b'

python subprocess popen

61
推荐指数
4
解决办法
6万
查看次数

阻止和非阻止子进程调用

我之间是完全糊涂了subprocess.call(),subprocess.Popen(),subprocess.check_call().

哪个是封锁哪个不是?

如果我用我的意思说的是subprocess.Popen()父进程是否等待子进程return/ exit它继续执行之前.

shell=True这些电话怎么影响?

python subprocess python-2.7 python-3.x

61
推荐指数
1
解决办法
5万
查看次数

python getoutput()在子进程中的等价物

我想从像一些shell命令得到的输出ls或者df在Python脚本.我看到它commands.getoutput('ls')已被弃用,但subprocess.call('ls')只会给我返回代码.

我希望有一些简单的解决方案.

python shell command subprocess

60
推荐指数
3
解决办法
8万
查看次数

何时使用在Ruby中启动子进程的每种方法

1. ``Backtick

1. a)%x{}百分比X <Backtick的替代语法

  • 在parse.y中定义,请参阅讨论

2. system()

3. fork()

4. open()

4.A. IO.popen()<表现相同open()

4.B. open("|-")

  • 叉到管道

4.C. IO.popen("-")<表现相同open("|-")

5. Open3.popen3()

  • require 'open3'
  • stdlib Open3

6. PTY.spawn()

  • require 'pty'
  • stdlib PTY

7. Shell.transact()

  • require 'shell'
  • stdlib Shell

什么时候应该放弃一个更复杂的方法的可信赖的背叛?

编辑1. 非常感谢Avdi Grimm的帖子描述了每种方法的示例用法:#1(&gist); #2(&gist); #3.

他们是很好的资源来回答如何,但没有明确的组成来回答每个应该使用为什么,并因此恕我直言这个问题不完整的答案.

ruby performance standards subprocess coding-style

60
推荐指数
3
解决办法
8120
查看次数

确保子程序在退出Python程序时已经死了

有没有办法确保所有创建的子进程在Python程序的退出时间都死了?通过子进程,我指的是使用subprocess.Popen()创建的.

如果没有,我应该迭代所有发出的杀戮然后杀死-9?什么更干净?

python subprocess kill zombie-process

59
推荐指数
7
解决办法
5万
查看次数

是否可以在子进程中运行函数而无需线程化或编写单独的文件/脚本.

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
Run Code Online (Sandbox Code Playgroud)

我只找到了使用单独脚本打开子进程的文档.有谁知道如何传递函数对象甚至是一种简单的方法来传递函数代码?

python subprocess function popen python-multiprocessing

59
推荐指数
4
解决办法
7万
查看次数

当我使用os.system()或subprocess.call()时,如何隐藏控制台?

我写了一些如下的陈述:

os.system(cmd) #do something
subprocess.call('taskkill /F /IM exename.exe')
Run Code Online (Sandbox Code Playgroud)

两者都会弹出一个控制台.

如何阻止它弹出控制台?

python windows console subprocess

59
推荐指数
2
解决办法
4万
查看次数

Python子进程通配符用法

import os

import subprocess

proc = subprocess.Popen(['ls','*.bc'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)

out,err = proc.communicate()

print out
Run Code Online (Sandbox Code Playgroud)

此脚本应打印带有.bc后缀的所有文件,但它会返回一个空列表.如果我在命令行中手动执行ls*.bc它可以工作.在脚本中执行['ls','test.bc']也可以,但由于某些原因,星形符号不起作用..任何想法?

python subprocess wildcard

58
推荐指数
2
解决办法
3万
查看次数