【发布时间】:2015-01-27 17:39:56
【问题描述】:
我有一个 python 脚本,我用它来调用一个重命名文件的 bash 脚本。然后我需要文件的新名称,以便 python 可以对其进行进一步处理。我正在使用 subprocess.Popen 来调用 shell 脚本。 shell 脚本会回显新文件名,因此我可以使用 stdout=subprocess.PIPE 来获取新文件名。
问题在于,有时 bash 脚本会根据具体情况尝试使用旧名称重命名文件,因此通过 mv 命令会给出两个文件相同的消息。我已经剪掉了所有其他的东西,并在下面包含了一个基本示例。
$ ls -1
test.sh
test.txt
这个shell脚本只是一个强制错误信息的例子。
$ cat test.sh
#!/bin/bash
mv "test.txt" "test.txt"
echo "test"
在python中:
$ python
>>> import subprocess
>>> p = subprocess.Popen(['/bin/bash', '-c', './test.sh'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
>>> p.stdout.read()
"mv: `test.txt' and `test.txt' are the same file\ntest\n"
如何忽略来自 mv 命令的消息而只获取 echo 命令的输出?如果一切顺利,shell 脚本的唯一输出将是 echo 的结果,所以我真的只需要忽略 mv 错误消息。
谢谢,
杰兰特
【问题讨论】:
-
如果您不想在
stdout上看到错误消息,请不要将stderr发送到stdout。 -
所以你不想知道命令有没有成功?
标签: python bash shell subprocess