小编典典

在python中使用bash命令脚本

python

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

为了实现这一点,我正在插入文件

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

在文件末尾,我放入

subprocess.call(['exit'])

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

提前感谢我如何做这项工作的任何建议


阅读 215

收藏
2021-01-20

共1个答案

小编典典

问题在于,subprocess.call直到script退出产生的外壳程序才返回,这时您的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跳过该块,并且脚本的其余部分将按预期运行。

2021-01-20