python 未正确显示可执行输出
python not displaying executable output properly
我正在使用代码通过 Linux 终端中的 python 执行可执行文件。
我在python中使用的代码是
import subprocess
def executable_shell():
# to run cosmo file
x=subprocess.run('cd .. && cd build && ./COSMO', shell=True, capture_output=True)
print(x)
executable_shell()
这里COSMO是我的可执行文件
对于 运行 这个 python 文件,我使用命令:$ python3 file.py
代码有效,但显示文件之间没有行 space,就像每个新行都从同一行开始而不是跳到新行。
但是如果我运行这个可执行文件以正常的方式从终端
$ ./COSMO
我得到了正确的格式。
示例输出:
xxxxx xxxxx xx
期望的输出:
xxxxx
xxxxx
xx
您的代码 运行 将在一行中打印 CompletedProcess
对象的人类可读表示形式,其中包括但远不止是子进程的实际输出。
Python 3.7.2 (default, Mar 25 2020, 10:15:53)
[Clang 11.0.3 (clang-1103.0.32.29)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import subprocess
>>> x = subprocess.run(['printf', '%s\n', 'foo', 'bar', 'baz'], capture_output=True)
>>> print(x)
CompletedProcess(args=['printf', '%s\n', 'foo', 'bar', 'baz'], returncode=0, stdout=b'foo\nbar\nbaz\n', stderr=b'')
要实际仅打印输出,请尝试
>>> print(x.stdout.decode())
foo
bar
baz
更好的是,让 Python 为您解码。
import subprocess
def executable_shell():
# to run cosmo file
x = subprocess.run(
# Just the command, as a list of arguments, so we can avoid shell=True
['./COSMO'],
# Specify which directory to run it in
cwd='../build',
# Throw an exception if the command fails (optional but recommended)
check=True,
# Have Python decode the output as text instead of raw bytes
text=True,
# Capture output, as before
capture_output=True)
return x.stdout
print(executable_shell())
请注意我是如何添加 text=True
(并且重构为使用 check=True
并删除 shell=True
)以及函数现在如何 return 的结果,以及调用者打印它(或者用它做其他事情,视情况而定)。通常,您希望函数返回 return 结果而不是打印它们;这使得将它们重用于其他任务变得更加容易。
我正在使用代码通过 Linux 终端中的 python 执行可执行文件。
我在python中使用的代码是
import subprocess
def executable_shell():
# to run cosmo file
x=subprocess.run('cd .. && cd build && ./COSMO', shell=True, capture_output=True)
print(x)
executable_shell()
这里COSMO是我的可执行文件
对于 运行 这个 python 文件,我使用命令:$ python3 file.py
代码有效,但显示文件之间没有行 space,就像每个新行都从同一行开始而不是跳到新行。
但是如果我运行这个可执行文件以正常的方式从终端
$ ./COSMO
我得到了正确的格式。
示例输出:
xxxxx xxxxx xx
期望的输出:
xxxxx
xxxxx
xx
您的代码 运行 将在一行中打印 CompletedProcess
对象的人类可读表示形式,其中包括但远不止是子进程的实际输出。
Python 3.7.2 (default, Mar 25 2020, 10:15:53)
[Clang 11.0.3 (clang-1103.0.32.29)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import subprocess
>>> x = subprocess.run(['printf', '%s\n', 'foo', 'bar', 'baz'], capture_output=True)
>>> print(x)
CompletedProcess(args=['printf', '%s\n', 'foo', 'bar', 'baz'], returncode=0, stdout=b'foo\nbar\nbaz\n', stderr=b'')
要实际仅打印输出,请尝试
>>> print(x.stdout.decode())
foo
bar
baz
更好的是,让 Python 为您解码。
import subprocess
def executable_shell():
# to run cosmo file
x = subprocess.run(
# Just the command, as a list of arguments, so we can avoid shell=True
['./COSMO'],
# Specify which directory to run it in
cwd='../build',
# Throw an exception if the command fails (optional but recommended)
check=True,
# Have Python decode the output as text instead of raw bytes
text=True,
# Capture output, as before
capture_output=True)
return x.stdout
print(executable_shell())
请注意我是如何添加 text=True
(并且重构为使用 check=True
并删除 shell=True
)以及函数现在如何 return 的结果,以及调用者打印它(或者用它做其他事情,视情况而定)。通常,您希望函数返回 return 结果而不是打印它们;这使得将它们重用于其他任务变得更加容易。