相关疑难解决方法(0)

Python子进程:cmd退出时的回调

我正在推出一个使用的程序 subprocess.Popen(cmd, shell=TRUE)

我对Python很新,但感觉就像应该有一些api让我做类似的事情:

subprocess.Popen(cmd, shell=TRUE,  postexec_fn=function_to_call_on_exit)
Run Code Online (Sandbox Code Playgroud)

我这样做是为了function_to_call_on_exit能够在知道cmd退出的基础上做一些事情(例如保持当前正在运行的外部进程数的计数)

我假设我可以相当简单地将子进程包装在一个将线程与Popen.wait()方法结合起来的类中,但是因为我还没有在Python中进行线程化,而且看起来这可能是一个常见的API存在,我想我会先尝试找一个.

提前致谢 :)

python subprocess callback exit

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

Python线程化多个bash子进程?

如何使用线程和子进程模块生成并行bash进程?当我启动线程时,第一个答案就在这里:如何在Python中使用线程?,bash进程按顺序而不是并行运行.

python multithreading subprocess

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

使用子进程运行多个bash命令

如果我echo a; echo b在bash中运行,结果将是两个命令都运行.但是,如果我使用subprocess,则运行第一个命令,打印出整个行的其余部分.下面的代码是echos a; echo b而不是a b,如何让它运行这两个命令?

import subprocess, shlex
def subprocess_cmd(command):
    process = subprocess.Popen(shlex.split(command), stdout=subprocess.PIPE)
    proc_stdout = process.communicate()[0].strip() 
    print proc_stdout

subprocess_cmd("echo a; echo b")
Run Code Online (Sandbox Code Playgroud)

python bash subprocess

32
推荐指数
3
解决办法
9万
查看次数

Python子进程并行

我希望能够并行运行多个进程,并且能够随时使用stdout.我该怎么办?我是否需要为每个subprocess.Popen()呼叫运行线程,什么?

python subprocess

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

使用在python中调用外部命令来控制子进程的数量

我理解使用subprocess是调用外部命令的首选方式.

但是如果我想在parall中运行几个命令,但是限制生成的进程数呢?困扰我的是我无法阻止子进程.例如,如果我打电话

subprocess.Popen(cmd, stderr=outputfile, stdout=outputfile)
Run Code Online (Sandbox Code Playgroud)

然后该过程将继续,无需等待cmd完成.因此,我无法将其包装在multiprocessing图书馆的工作人员中.

例如,如果我这样做:

def worker(cmd): 
    subprocess.Popen(cmd, stderr=outputfile, stdout=outputfile);

pool = Pool( processes = 10 );
results =[pool.apply_async(worker, [cmd]) for cmd in cmd_list];
ans = [res.get() for res in results];
Run Code Online (Sandbox Code Playgroud)

然后每个工人将在产生子流程后完成并返回.所以我无法真正限制subprocess使用生成的进程数Pool.

什么是限制子过程数量的正确方法?

python parallel-processing subprocess multiprocessing

13
推荐指数
2
解决办法
8367
查看次数

使用子进程模块是否释放python GIL?

当调用通过Python subprocess模块花费相对较长时间的linux二进制文件时,这会释放GIL吗?

我想并行化一些从命令行调用二进制程序的代码.是否更好地使用线程(通过threading和a multiprocessing.pool.ThreadPool)或multiprocessing?我的假设是,如果subprocess发布GIL,那么选择该threading选项会更好.

python multithreading subprocess gil python-multithreading

10
推荐指数
2
解决办法
3343
查看次数

如何使用asyncio在python3中运行并行作业?

假设我有这样一个类:

class MyClass:
    def __init__(self):
        run_some_long_time_function()
Run Code Online (Sandbox Code Playgroud)

如何在python 3.4.1中使用asyncio并行创建此类的多个实例?

python python-asyncio

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

使用asyncio(Python 3.4+)异步接收长时间运行的shell命令的输出?

我试图找出如何以非阻塞方式简单地启动一些长时间运行的shell命令,并按照它们完成的顺序异步处理它们的输出,即使这是另一个订单而不是它们开始,使用Python 3.4中提供的asyncio python库并转发.

我找不到一个这样做的简单例子,即使在asyncio文档中也是如此,这似乎也是相当低级的.

python subprocess python-asyncio

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

Asyncio错误,尝试对非套接字的操作进行操作

我正在研究当前的玩具代码,试图理解asyncio模块.

import asyncio
import os, sys, traceback
from time import time

os.environ['PYTHONASYNCIODEBUG'] = '1'
print(sys.version)

def timed_fib(n):
    def fib(n):
        return fib(n - 1) + fib(n - 2) if n > 1 else n
    a = time()
    return fib(n), time() - a

def process_input():
    text = sys.stdin.readline()
    n = int(text.strip())
    print('fib({}) = {}'.format(n, timed_fib(n)))


@asyncio.coroutine
def print_hello():
    while True:
        print("{} - Hello world!".format(int(time())))
        yield from asyncio.sleep(3)

def main():
    loop = asyncio.get_event_loop()
    loop.add_reader(sys.stdin, process_input)
    loop.run_until_complete(print_hello())


if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

然而,尝试运行它会产生下面令人难以置信的神秘回溯.如您所见,调试环境变量在上面代码的第五行中设置,但是,回溯仍然非常无益,如下所示:

3.4.3rc1 …
Run Code Online (Sandbox Code Playgroud)

python windows python-3.x python-asyncio

4
推荐指数
1
解决办法
1466
查看次数

在Python中与os.system()并行运行两个可执行文件?

我希望并行运行两个可执行文件 a.exe 和 b.exe,依次调用。

当我尝试时,

os.system('a.exe')
#some code
os.system('b.exe')
Run Code Online (Sandbox Code Playgroud)

b.exe 在我杀死 a.exe 后才开始启动?为什么会发生这种情况?我怎样才能同时运行两者?(需要多线程吗?) 注:我是Windows平台

python multithreading subprocess python-2.7

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