首页 > 解决方案 > 在 python 中使用 bash 命令脚本

问题描述

我有一个 python 脚本,它在运行时会在终端上记录信息,我想将此记录信息发送到文本文件,

为了在我插入的文件的开头实现这一点

import subprocess
subprocess.call(['script', 'logfile'])

在文件的最后,我输入,

subprocess.call(['exit'])

问题是当它调用第一个命令时script logfile,它会终止脚本,

任何关于我如何完成这项工作的建议都会非常有帮助,在此先感谢

标签: pythonbash

解决方案


问题是subprocess.call直到script退出产生的 shell 才会返回,此时您的 Python 脚本将恢复。

做你想做的最简单的方法是script用你的 Python 脚本作为参数调用它自己。代替

#!/usr/bin/python

import subprocess

subprocess.call(['script', 'logfile'])

# Rest of your Python code

subprocess.call(['exit'])

你会用

#!/usr/bin/python

import os
import sys

if '_underscript' not in os.environ:
    os.environ['_underscript'] = "yes"
    cmd_args = ['script', 'logfile', 'python'] + sys.argv
    os.execvp('script', cmd_args)

# Rest of your Python code

环境变量可防止您的脚本进入无限循环,使用script. 当您运行 Python 脚本时,它首先会检查其环境中不应该存在的变量。如果没有,它会设置该变量,然后运行script以重新运行 Python 脚本。execvp用调用替换你的脚本script;Python 脚本中没有其他任何内容执行。在您的脚本第二次运行时,该变量_underscript 确实存在,这意味着该if块被跳过并且您的脚本的其余部分按预期运行。


推荐阅读