相关疑难解决方法(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万
查看次数

如何在Python 2.7中隐藏子进程的输出

我在Ubuntu上使用eSpeak并且有一个Python 2.7脚本可以打印并说出一条消息:

import subprocess
text = 'Hello World.'
print text
subprocess.call(['espeak', text])
Run Code Online (Sandbox Code Playgroud)

eSpeak会产生所需的声音,但是外壳会出现一些错误(ALSA lib ...,没有套接字连接),因此我无法轻易读取之前打印的内容.退出代码为0.

不幸的是,没有任何记录的选项可以关闭它的详细程度,所以我正在寻找一种只能在视觉上使其静音并保持打开的外壳清洁以进行进一步交互的方法.

我怎样才能做到这一点?

python subprocess espeak python-2.7

262
推荐指数
4
解决办法
20万
查看次数

将os.system的输出分配给变量并防止它显示在屏幕上

我想将我运行的命令的输出分配给os.system变量,并防止它输出到屏幕.但是,在下面的代码中,输出被发送到屏幕并且打印的var值为0,我猜这表示命令是否成功运行.有没有办法将命令输出分配给变量并阻止它显示在屏幕上?

var = os.system("cat /etc/services")
print var #Prints 0
Run Code Online (Sandbox Code Playgroud)

python

253
推荐指数
6
解决办法
39万
查看次数

子进程中'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万
查看次数

在进程运行时不断打印Subprocess输出

要从我的Python脚本启动程序,我使用以下方法:

def execute(command):
    process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    output = process.communicate()[0]
    exitCode = process.returncode

    if (exitCode == 0):
        return output
    else:
        raise ProcessException(command, exitCode, output)
Run Code Online (Sandbox Code Playgroud)

因此,当我启动一个类似的过程时Process.execute("mvn clean install"),我的程序会一直等到过程结束,然后我才能获得程序的完整输出.如果我正在运行需要一段时间才能完成的过程,这很烦人.

我可以让我的程序逐行写入进程输出,通过在循环结束之前轮询进程输出或其他内容吗?

**[编辑]抱歉,在发布此问题之前我没有很好地搜索.线程实际上是关键.在这里找到一个示例,说明如何执行此操作:** 来自线程的Python Subprocess.Popen

python subprocess

175
推荐指数
9
解决办法
16万
查看次数

相当于Python中的Bash反引号

Python中Ruby和Perl中的反引号相当于什么?也就是说,在Ruby中我可以这样做:

foo = `cat /tmp/baz`
Run Code Online (Sandbox Code Playgroud)

Python中的等效语句是什么样的?我已经尝试os.system("cat /tmp/baz")但是将结果置于标准输出并返回给我该操作的错误代码.

python backticks

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

Python:运行os.system后如何获取stdout?

我希望stdout在运行os.system调用后获取变量.

让我们以此行为例:

batcmd="dir"
result = os.system(batcmd)
Run Code Online (Sandbox Code Playgroud)

result将包含错误代码(stderr 0在Windows下或1在某些linux下用于上面的示例).

如何stdout在执行的命令中不使用重定向来获取上述命令?

python os.system stdout stderr python-2.7

79
推荐指数
6
解决办法
16万
查看次数

如何禁用特定文件中的pep8错误?

我试过了

#:PEP8 -E223
Run Code Online (Sandbox Code Playgroud)

要么

# pep8: disable=E223
Run Code Online (Sandbox Code Playgroud)

我认为第二个会起作用,但似乎不起作用.

你知道我怎么能处理这个吗?

python pep8

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

如何在python中获得终端输出?

我可以使用终端命令,os.system()但我想捕获此命令的输出.我怎样才能做到这一点?

python terminal

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

在python中,将system命令的输出作为字符串

在python中,我可以使用os或subprocess运行一些系统命令.问题是我无法将输出作为字符串.例如:

>>> tmp = os.system("ls")
file1 file2
>>> tmp
0
Run Code Online (Sandbox Code Playgroud)

我有一个旧版本的子进程没有函数check_out,我更喜欢一个不需要更新该模块的解决方案,因为我的代码将运行在我没有完全管理员权限的服务器上.

这个问题似乎微不足道,但我找不到一个简单的解决方案

python shell command-line

27
推荐指数
1
解决办法
9万
查看次数