相关疑难解决方法(0)

子进程中'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.Popen()IO重定向

尝试将子进程的输出重定向到文件.

server.py:

while 1:
    print "Count " + str(count)
    sys.stdout.flush()
    count = count + 1
    time.sleep(1)
Run Code Online (Sandbox Code Playgroud)

Laucher:

cmd = './server.py >temp.txt'
args = shlex.split(cmd)
server = subprocess.Popen( args )
Run Code Online (Sandbox Code Playgroud)

输出显示在屏幕上,temp.txt保持为空.我究竟做错了什么?

作为背景我试图捕获已经编写的程序的输出.

我不能用:

server = subprocess.Popen(
                [exe_name],
                stdin=subprocess.PIPE, stdout=subprocess.PIPE)
Run Code Online (Sandbox Code Playgroud)

因为该程序可能不会刷新.相反,我打算通过fifo重定向输出.如果我手动启动server.py,这很好,但显然不是因为我Popen()导致重定向不起作用. ps -aux显示server.py正确启动.

python popen

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

标签 统计

python ×2

popen ×1

subprocess ×1