标签: subprocess

如何从Python异步运行外部命令?

我需要从Python脚本异步运行shell命令.通过这个我的意思是我希望我的Python脚本在外部命令关闭时继续运行并执行它需要做的任何事情.

我看过这篇文章:

在Python中调用外部命令

然后我os.system()去做了一些测试,看起来我会&在命令结束时使用它来完成工作,这样我就不必等待它返回了.我想知道的是,这是否是实现这一目标的正确方法?我试过commands.call()但它对我不起作用,因为它阻止了外部命令.

如果使用os.system()这个是可取的,或者我应该尝试其他路线,请告诉我.

python subprocess asynchronous scheduler

99
推荐指数
8
解决办法
12万
查看次数

subprocess.Popen和os.system之间的区别

subprocess.Popen()和之间有什么区别os.system()

python subprocess system

97
推荐指数
5
解决办法
8万
查看次数

管道子进程标准输出到变量

我想pythong使用子进程模块运行命令,并将输出存储在变量中.但是,我不希望将命令的输出打印到终端.对于此代码:

def storels():
   a = subprocess.Popen("ls",shell=True)
storels()
Run Code Online (Sandbox Code Playgroud)

我在终端中获取目录列表,而不是将其存储在a.我也尝试过:

 def storels():
       subprocess.Popen("ls > tmp",shell=True)
       a = open("./tmp")
       [Rest of Code]
 storels()
Run Code Online (Sandbox Code Playgroud)

这也会将ls的输出打印到我的终端.我甚至尝试过这个有点过时的os.system方法的命令,因为ls > tmp在终端中运行根本不会打印ls到终端,而是存储它tmp.但是,同样的事情发生了.

编辑:

遵循marcog的建议后,我得到以下错误,但仅在运行更复杂的命令时.cdrecord --help.Python吐了出来:

Traceback (most recent call last):
  File "./install.py", line 52, in <module>
    burntrack2("hi")
  File "./install.py", line 46, in burntrack2
    a = subprocess.Popen("cdrecord --help",stdout = subprocess.PIPE)
  File "/usr/lib/python2.6/subprocess.py", line 633, in __init__
    errread, errwrite)
  File "/usr/lib/python2.6/subprocess.py", line 1139, in _execute_child
    raise child_exception
OSError: [Errno …
Run Code Online (Sandbox Code Playgroud)

python subprocess pipe python-2.6

88
推荐指数
3
解决办法
15万
查看次数

如何在Python中使用子进程重定向输出?

我在命令行中做了什么:

cat file1 file2 file3 > myfile
Run Code Online (Sandbox Code Playgroud)

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

python subprocess

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

如何使用subprocess popen Python

由于os.popen被subprocess.popen取代,我想知道如何转换

os.popen('swfdump /tmp/filename.swf/ -d')
Run Code Online (Sandbox Code Playgroud)

到subprocess.popen()

我试过了:

subprocess.Popen("swfdump /tmp/filename.swf -d")
subprocess.Popen("swfdump %s -d" % (filename))  # NOTE: filename is a variable
                                                # containing /tmp/filename.swf
Run Code Online (Sandbox Code Playgroud)

但我想我没有正确地写出来.任何帮助,将不胜感激.谢谢

python subprocess popen

86
推荐指数
4
解决办法
26万
查看次数

如何将子进程调用传递给文本文件?

subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml",  "/tmp/video_xml"])
Run Code Online (Sandbox Code Playgroud)

现在我有一个我运行的脚本.当我运行它并且它击中这一行时,它开始打印东西,因为run.sh中有打印.

如何将其传输到文本文件?(还可以打印,如果可能的话)

python unix linux shell subprocess

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

从subprocess.communicate()读取流输入

我正在使用Python subprocess.communicate()来从一个运行大约一分钟的进程中读取stdout.

如何stdout以流式方式打印出该流程的每一行,以便我可以看到生成的输出,但在继续之前仍然阻止流程终止?

subprocess.communicate() 似乎立刻提供所有输出.

python subprocess

75
推荐指数
3
解决办法
7万
查看次数

从子进程实时捕获stdout

我想subprocess.Popen()在Windows中使用rsync.exe,并在Python中打印stdout.

我的代码有效,但在文件传输完成之前它没有抓住进度!我想实时打印每个文件的进度.

现在使用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()
Run Code Online (Sandbox Code Playgroud)

python subprocess stdout

74
推荐指数
9
解决办法
10万
查看次数

子进程更改目录

我想在子目录/超级目录中执行一个脚本(我需要先在这个子/超级目录中).我无法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, in call
    return Popen(*popenargs, **kwargs).wait()
  File "/usr/lib/python2.7/subprocess.py", line 711, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1308, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or …
Run Code Online (Sandbox Code Playgroud)

python subprocess

73
推荐指数
7
解决办法
10万
查看次数

等待进程直到所有子进程完成?

我有一个创建两个或更多子流程的主流程,我希望主流程等到所有子流程完成其操作并退出?

 # main_script.py

 p1 = subprocess.Popen(['python script1.py']) 
 p2 = subprocess.Popen(['python script2.py'])
 ... 
 #wait main process until both p1, p2 finish
 ...
Run Code Online (Sandbox Code Playgroud)

python subprocess ipc

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

标签 统计

python ×10

subprocess ×10

asynchronous ×1

ipc ×1

linux ×1

pipe ×1

popen ×1

python-2.6 ×1

scheduler ×1

shell ×1

stdout ×1

system ×1

unix ×1