在python中使用bash命令脚本

发布于 2021-01-29 15:02:38

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

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

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

在文件末尾,我放入

subprocess.call(['exit'])

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

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

关注者
0
被浏览
106
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    问题在于,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跳过该块,并且脚本的其余部分将按预期运行。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看