【发布时间】:2018-04-23 06:44:11
【问题描述】:
INPUTS 是我为可能的输入文件目录的绝对路径提供的变量。我想在通过我的管道之前检查他们的状态。所以我尝试了:
import subprocess
import argparse
INPUTS = '/home/username/WinterResearch/Inputs'
status = subprocess.Popen(['ls', '-lh', INPUTS], shell=True, stdout=subprocess.PIPE)
stdout = status.communicate()
status.stdout.close()
常用的我也试过了
from shlx import split
import subprocess
import argparse
cmd = 'ls -lh INPUTS'
status = subprocess.Popen(cmd.split(), shell=True, stdout=subprocess.PIPE)
和
cmd = "ls -lh 'INPUTS'"
我没有收到错误代码。该过程根本不会向终端窗口输出任何内容。我不确定为什么 python 脚本只是跳过这个而不是说明有错误。当我包含 close_fds=True 指出 int 不能使用通信()时,我确实收到了一个错误。那么如何使用 subprocess.Popen() 接收来自 ls -lh INPUTS 等效项的输出?
【问题讨论】:
-
考虑到斜杠,您在 macOS X 或某些 Linux 上。然后将您的 INPUT 变量更改为
~/WinterResearch/Inputs或放置以/Users开头的绝对路径...或检查您的预期命令是否在终端中正确执行。 -
我尝试了
~/WinterResearch/Inputs,错误是有"No such file or directory found"。ls -lh /home/username/WinterResearch/Inputs在终端上很好。 -
shell=True是你的问题。 -
os.path.expanduser()将修复~/WinterResearch/Inputs字符串,将~替换为用户的实际主目录(就像shell 所做的那样)。 -
顺便说一句,您为什么期望这段代码可以向终端写入任何内容?您的内容被捕获到管道中——因为您要求它被捕获——其输出被转储到名为
stdout的变量中。
标签: python bash subprocess popen