将 shell 脚本输出分配给 python 变量,忽略错误消息
Assign shell script output to python variable ignoring error messages
我有一个 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 错误消息。
谢谢,
杰兰特
直接stderr
为空,因此
$ python
>>> import os
>>> from subprocess import *
>>> p = Popen(['/bin/bash', '-c', './test.sh'], stdout=PIPE, stderr=open(os.devnull, 'w'))
>>> p.stdout.read()
获取子进程的输出并忽略其错误消息:
#!/usr/bin/env python
from subprocess import check_output
import os
with open(os.devnull, 'wb', 0) as DEVNULL:
output = check_output("./test.sh", stderr=DEVNULL)
如果脚本 returns 具有非零状态,check_output()
会引发异常。
参见How to hide output of subprocess in Python 2.7。
我有一个 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 错误消息。
谢谢,
杰兰特
直接stderr
为空,因此
$ python
>>> import os
>>> from subprocess import *
>>> p = Popen(['/bin/bash', '-c', './test.sh'], stdout=PIPE, stderr=open(os.devnull, 'w'))
>>> p.stdout.read()
获取子进程的输出并忽略其错误消息:
#!/usr/bin/env python
from subprocess import check_output
import os
with open(os.devnull, 'wb', 0) as DEVNULL:
output = check_output("./test.sh", stderr=DEVNULL)
如果脚本 returns 具有非零状态,check_output()
会引发异常。
参见How to hide output of subprocess in Python 2.7。