在Python中通过subprocess查看shell脚本的输出
在Python中通过subprocess查看shell脚本的输出
我有一个简单的shell文件,内容如下:
#! /bin/bash echo "Hello" echo "Full Name: $1"; echo "Age: $2";
我在Python Jupyter Notebook中这样调用该文件:
import subprocess filePath = 'testScript.sh' arg1 = 'John Doe' arg2 = 2 subprocess.run([filePath, arg1, str(arg2)], shell=True, check=True)
文件运行正常,我得到以下输出:
CompletedProcess(args=['testScript.sh', 'John Doe', '2'], returncode=0)
当代码运行时,会弹出一个命令行窗口,输出会在窗口中闪现一秒钟然后关闭。我想知道是否有办法将输出打印到Python中,而不仅仅在命令行窗口中看到输出?或者有没有办法阻止命令行窗口关闭,这样我就可以看到输出?
问题出现的原因是使用subprocess.run()运行shell脚本时,标准输出和标准错误输出并没有直接显示在Python中。解决方法有两种:
1. 将输出写入文件:可以通过将输出重定向到文件来实现。首先创建一个文件对象,然后将其传递给subprocess.run()函数的stdout和stderr参数。如下所示:
import subprocess import os subdir = ... # 脚本所在路径 fout = open(os.path.join(subdir, "out.txt"), "w") # 打开一个文件用于保存标准输出 ferr = open(os.path.join(subdir, "err.txt"), "w") # 打开一个文件用于保存标准错误输出 p = subprocess.run(file_to_run, cwd=subdir, stdout=fout, stderr=ferr)
这样会在指定的路径下创建out.txt和err.txt文件,并将shell脚本的标准输出和标准错误输出写入到这两个文件中。
2. 在脚本末尾添加"pause"命令(适用于Windows/DOS批处理文件):在脚本末尾添加"pause"命令可以阻止控制台自动关闭。可以通过在脚本末尾添加以下代码来实现:
pause
这样在脚本执行完毕后,控制台会等待用户按下任意键才关闭。
需要注意的是,第一种方法会将输出保存到文件中,方便后续查看和分析。而第二种方法则是在控制台中直接显示输出,但需要手动关闭控制台。根据具体需求选择合适的方法来查看shell脚本的输出。