python - 在 python 中使用 bash 命令脚本
问题描述
我有一个 python 脚本,它在运行时会在终端上记录信息,我想将此记录信息发送到文本文件,
为了在我插入的文件的开头实现这一点
import subprocess
subprocess.call(['script', 'logfile'])
在文件的最后,我输入,
subprocess.call(['exit'])
问题是当它调用第一个命令时script logfile
,它会终止脚本,
任何关于我如何完成这项工作的建议都会非常有帮助,在此先感谢
解决方案
问题是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
块被跳过并且您的脚本的其余部分按预期运行。
推荐阅读
- python - 在 kivy 语言的 TextInput wiget 中显示 python 代码中的变量
- mysql - SQL 子查询 + 多个内连接效率和错误
- memory-address - 从 GEM5 获取物理地址跟踪
- python - 如何使用 csv 模块将多个值的字典写入 csv?
- java - 我可以让 Bazel 始终在规则的测试中输出错误吗?
- python - 如何使用一个函数调用其他函数
- mysql - 如何两个表和计算
- r - ifelse(length(date)==1, date, otherdate) 在基础 R、dplyr 和 data.table 之间有所不同
- python - 带有 Typeerror 的 sqlalchemy 但 pyodbc 有效
- javascript - Dispatch 不将操作发送到减速器