标签: popen

用管道链接几个Popen命令

我知道如何使用cmd = subprocess.Popen然后subprocess.communicate运行命令.大多数时候我使用shlex.split标记化的字符串作为Popen的'argv'参数."ls -l"的示例:

import subprocess
import shlex
print subprocess.Popen(shlex.split(r'ls -l'), stdin = subprocess.PIPE, stdout = subprocess.PIPE, stderr = subprocess.PIPE).communicate()[0]
Run Code Online (Sandbox Code Playgroud)

但是,管道似乎不起作用...例如,以下示例返回注意:

import subprocess
import shlex
print subprocess.Popen(shlex.split(r'ls -l | sed "s/a/b/g"'), stdin = subprocess.PIPE, stdout = subprocess.PIPE, stderr = subprocess.PIPE).communicate()[0]
Run Code Online (Sandbox Code Playgroud)

你能告诉我我做错了吗?

谢谢

python command subprocess pipe popen

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

Python:子进程并运行带有多个参数的bash脚本

如何使用子进程模块运行bash脚本,我必须给出几个参数?

这就是我目前使用的:

subprocess.Popen(['/my/file/path/programname.sh', 'arg1 arg2 %s' % arg3], \
    shell = True)
Run Code Online (Sandbox Code Playgroud)

bash脚本似乎没有采用任何参数.任何见解都非常感谢!

python bash arguments subprocess popen

26
推荐指数
2
解决办法
6万
查看次数

在运行时拦截子进程的stdout

如果这是我的子流程:

import time, sys
for i in range(200):
    sys.stdout.write( 'reading %i\n'%i )
    time.sleep(.02)
Run Code Online (Sandbox Code Playgroud)

这是控制和修改子进程输出的脚本:

import subprocess, time, sys

print 'starting'

proc = subprocess.Popen(
    'c:/test_apps/testcr.py',
    shell=True,
    stdin=subprocess.PIPE,
    stdout=subprocess.PIPE  )

print 'process created'

while True:
    #next_line = proc.communicate()[0]
    next_line = proc.stdout.readline()
    if next_line == '' and proc.poll() != None:
        break
    sys.stdout.write(next_line)
    sys.stdout.flush()

print 'done'
Run Code Online (Sandbox Code Playgroud)

为什么readlinecommunicate等待,直到程序完成后运行?有没有一种简单的方法来传递(和修改)子进程'stdout实时?

顺便说一下,我已经看过,但是我不需要记录功能(并且没有太多的了解它).

我在Windows XP上.

python subprocess stdout process popen

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

Python,Popen和select - 等待进程终止或超时

我使用以下命令运行子进程:

  p = subprocess.Popen("subprocess", 
                       stdout=subprocess.PIPE, 
                       stderr=subprocess.PIPE, 
                       stdin=subprocess.PIPE)
Run Code Online (Sandbox Code Playgroud)

此子进程可以立即退出stderr上的错误,也可以继续运行.我想检测这些条件中的任何一个 - 后者等待几秒钟.

我试过这个:

  SECONDS_TO_WAIT = 10
  select.select([], 
                [p.stdout, p.stderr], 
                [p.stdout, p.stderr],
                SECONDS_TO_WAIT)
Run Code Online (Sandbox Code Playgroud)

但它只是返回:

  ([],[],[])
Run Code Online (Sandbox Code Playgroud)

无论哪种条件.我能做什么?

python select subprocess timeout popen

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

杀死一个以popen开始的进程

打开管道到进程后popen,有没有办法杀死已经启动的进程?(使用pclose不是我想要的,因为它将等待进程完成,但我需要杀死它.)

c multithreading kill popen

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

c popen不会抓住stderr

我正试图用来popen()捕捉一个电话的stderr,但当然它似乎并没有这样做.有任何想法吗?

我的代码看起来或多或少像这样:

popen("nedit", "r");
Run Code Online (Sandbox Code Playgroud)

但是我在屏幕上得到了关于非utf8的所有垃圾......

c popen stderr

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

subprocess.Popen在不同的控制台中

我希望这不是重复.

我正在尝试使用subprocess.Popen()在单独的控制台中打开脚本.我已经尝试过设置shell=True参数,但这并不能解决问题.

我在64位Windows 7上使用32位Python 2.7.

python subprocess popen python-2.7

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

Subprocess.Popen:将stdout和stderr克隆到终端和变量

是否可以修改以下代码以从'stdout'和'stderr'打印输出:

  • 印在终端上(实时),
  • 最后存储在outerrs变量中?

代码:

#!/usr/bin/python3
# -*- coding: utf-8 -*-

import subprocess

def run_cmd(command, cwd=None):
    p = subprocess.Popen(command, cwd=cwd, shell=False,
                         stdout=subprocess.PIPE,
                         stderr=subprocess.PIPE)
    outs, errs = p.communicate()
    rc = p.returncode
    outs = outs.decode('utf-8')
    errs = errs.decode('utf-8')

    return (rc, (outs, errs))
Run Code Online (Sandbox Code Playgroud)

感谢@unutbu,特别感谢@ jf-sebastian,最终功能:

#!/usr/bin/python3
# -*- coding: utf-8 -*-


import sys
from queue import Queue
from subprocess import PIPE, Popen
from threading import Thread


def read_output(pipe, funcs):
    for line in iter(pipe.readline, b''):
        for func in funcs: …
Run Code Online (Sandbox Code Playgroud)

python subprocess popen python-3.x

22
推荐指数
2
解决办法
6034
查看次数

如何从python调用程序而不等待它返回

有没有办法从python调用程序而不等待它返回?我创建了一个脚本,将程序复制到目录并运行该程序.但是当我从python调用程序时,python脚本不会退出,直到我启动的程序退出.我试过os.system和Popen.还有另一种方法吗?

添加信息:os.spawnl与os.P_DETACH仍然不起作用; 根据文档,"P_DETACH类似于P_NOWAIT,但新进程与调用进程的控制台分离".但它仍然以某种方式附加到我的调用进程(调用脚本将不会退出,直到任何被调用的可执行文件返回)

程序:

os.system("start test.exe")
print "Done"
Run Code Online (Sandbox Code Playgroud)

执行test.exe后,它会打印Done.但它不会终止脚本的执行(脚本进程仍在运行).尝试用P_DETACH创建一个守护程序线程和Popen,仍然没有去.

python command subprocess popen

21
推荐指数
3
解决办法
5万
查看次数

C中的popen()和system()有什么区别

我想在我的C代码中执行二进制文件.执行哪个更好?popen()要么system()

编辑:我试图使用system,但执行过程似乎陷入最后,并没有返回到我的代码.

有关该怎么办的任何建议?

谢谢

c system popen

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