相关疑难解决方法(0)

将subprocess.Popen调用的输出存储在字符串中

我正在尝试用Python进行系统调用,并将输出存储到我可以在Python程序中操作的字符串中.

#!/usr/bin/python
import subprocess
p2 = subprocess.Popen("ntpq -p")
Run Code Online (Sandbox Code Playgroud)

我尝试了一些事情,包括一些建议:

检索subprocess.call()的输出

但没有任何运气.

python subprocess

278
推荐指数
10
解决办法
40万
查看次数

子进程中'shell = True'的实际含义

我用subprocess模块调用不同的进程.但是,我有一个问题.

在以下代码中:

callProcess = subprocess.Popen(['ls', '-l'], shell=True)
Run Code Online (Sandbox Code Playgroud)

callProcess = subprocess.Popen(['ls', '-l']) # without shell
Run Code Online (Sandbox Code Playgroud)

两者都有效.阅读文档后,我开始知道这shell=True意味着通过shell执行代码.这意味着在缺席的情况下,该过程将直接启动.

那么我应该更喜欢我的情况 - 我需要运行一个进程并获得其输出.从shell内部或外部调用它有什么好处.

python subprocess

236
推荐指数
5
解决办法
14万
查看次数

如何写入Python子进程'stdin?

我正在尝试编写一个启动子进程的Python脚本,并写入子进程stdin.我还希望能够确定子进程崩溃时要采取的操作.

我正在尝试启动的过程是一个程序nuke,它有自己的内置版本的Python,我希望能够提交命令,然后告诉它在执行命令后退出.到目前为止,我已经知道,如果我在命令提示符上启动Python,然后nuke作为子进程启动,那么我可以输入命令nuke,但我希望能够将所有这些都放在一个脚本中,以便主Python程序可以启动nuke然后写入其标准输入(因此也可以写入其内置版本的Python),并告诉它做一些时髦的东西,所以我编写了一个脚本,nuke如下所示:

subprocess.call(["C:/Program Files/Nuke6.3v5/Nuke6.3", "-t", "E:/NukeTest/test.nk"])
Run Code Online (Sandbox Code Playgroud)

然后没有任何事情发生,因为nuke等待用户输入.我现在如何写入标准输入?

我这样做是因为我正在运行一个插件nuke,导致它在渲染多个帧时间歇性地崩溃.所以我希望这个脚本能够启动nuke,告诉它做某事然后如果它崩溃了,再试一次.因此,如果有办法赶上崩溃并且仍然可以,那就太棒了.

python stdin subprocess nuke

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

如何使用subprocess.Popen通过管道连接多个进程?

如何使用Python subprocess模块执行以下shell命令?

echo "input data" | awk -f script.awk | sort > outfile.txt
Run Code Online (Sandbox Code Playgroud)

输入数据将来自一个字符串,所以我实际上并不需要echo.我已经走到这一步了,任何人都可以解释我是如何通过它来解决的sort吗?

p_awk = subprocess.Popen(["awk","-f","script.awk"],
                          stdin=subprocess.PIPE,
                          stdout=file("outfile.txt", "w"))
p_awk.communicate( "input data" )
Run Code Online (Sandbox Code Playgroud)

更新:请注意,虽然下面接受的答案实际上没有回答问题,但我相信S.Lott是对的,最好避免首先解决这个问题!

python subprocess pipe

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

Python子进程:如何使用管道三次?

我想在以下行使用子进程:

convert ../loxie-orig.png bmp:- | mkbitmap -f 2 -s 2 -t 0.48 | potrace -t 5 --progress -s -o ../DSC00232.svg
Run Code Online (Sandbox Code Playgroud)

我感谢其他帖子的子流程文档,但在示例中我们只使用了两次管道.

所以,我尝试三个命令中的两个,它的工作原理

p1 = subprocess.Popen(['convert', fileIn, 'bmp:-'], stdout=subprocess.PIPE)
# p2 = subprocess.Popen(['mkbitmap', '-f', '2', '-s', '2', '-t', '0.48'], stdout=subprocess.PIPE)
p3 = subprocess.Popen(['potrace', '-t' , '5', '-s' , '-o', fileOut], stdin=p1.stdout,stdout=subprocess.PIPE)
p1.stdout.close()  # Allow p1 to receive a SIGPIPE if p3 exits.
output = p3.communicate()[0]
Run Code Online (Sandbox Code Playgroud)

你能帮助我完成第三个命令吗?

非常感谢你.

python subprocess pipe

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

子进程没有运行该命令生成的命令在终端上工作

cmd= ["sudo", "cat", "{filepath}".format(filepath=filepath), "|","egrep", "-v","\'{filteruser}\'".format(filteruser=filteruser)]
Run Code Online (Sandbox Code Playgroud)

fileformat和filteruser也可以是空白的

配置文件如下

[plugin_haproxy]
user= tara
host=localhost
filepath=/etc/haproxy/haproxy.global.inc
filter=
Run Code Online (Sandbox Code Playgroud)

这是我想在子进程上运行的命令,用pdb检查上面的变量值显示波纹管值并且看起来很棒

['sudo', 'cat', '/etc/haproxy/haproxy.global.inc', '|', 'egrep', '-v', "''"]
Run Code Online (Sandbox Code Playgroud)

Manullay运行代码sudo cat /etc/haproxy/haproxy.global.inc | 终端上的egrep -v"''"很棒

为什么子进程无法处理它.

"cat:|:没有这样的文件或目录\n \ncat:egrep:没有这样的文件或目录\n \ncat:

python subprocess

6
推荐指数
1
解决办法
2372
查看次数

使用子进程获取通过 head -1 管道传输的 grep 输出

我想做的要点是:

grep -n "some phrase" {some file path} | head -1
Run Code Online (Sandbox Code Playgroud)

我想将其输出传递到 python 中。到目前为止我尝试过的是:

p = subprocess.Popen('grep -n "some phrase" {some file path} | head -1',shell=True,stdout=subprocess.PIPE)
Run Code Online (Sandbox Code Playgroud)

我收到很多回复说

"grep: writing output: Broken pipe"
Run Code Online (Sandbox Code Playgroud)

我对该模块不太熟悉subprocess,我想了解如何获得此输出以及我目前做错了什么。

python grep subprocess pipe head

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

如何在python中运行多行bash命令?

我想bash在python程序中运行以下几行linux 命令.

tail /var/log/omxlog | stdbuf -o0 grep player_new | while read i
do
    Values=$(omxd S | awk -F/ '{print $NF}')
    x1="${Values}"
    x7="${x1##*_}"
    x8="${x7%.*}"
    echo ${x8}
done
Run Code Online (Sandbox Code Playgroud)

我知道对于单行命令,我们可以使用以下语法:

subprocess.call(['my','command'])
Run Code Online (Sandbox Code Playgroud)

但是,subprocess.call如果多行中有多个命令,我该如何使用?

python bash subprocess

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

标签 统计

python ×8

subprocess ×8

pipe ×3

bash ×1

grep ×1

head ×1

nuke ×1

stdin ×1