python - 如何评估python变量并将其作为参数传递给命令
问题描述
在下面的 python 脚本中,我试图将当前日期和时间戳放入名为 logfile 的 python 变量中,该变量作为参数传递给使用执行的 windows 命令的输出重定向os.system(...)
但我无法传递变量日志文件。执行此脚本后,我希望看到一个文件:例如 log_28052019_133838.txt,其名称在执行时具有日期和时间戳,并且具有 dir /od 命令的输出,但它存储在文件 logfile 中,告诉我在作为输出重定向文件名传递之前没有对变量名日志文件的 python 表达式进行评估。
有人可以指出我,我错过了什么以及实现我想要做的事情的正确方法是什么。
#!/bin/python
import os
import time
fstr = time.strftime("%d%b%Y_%H%M%S")
logfile = "log_"+fstr+".txt"
rcmd = 'dir /OD >logfile '
os.system(rcmd)
解决方案
似乎 的值logfile
将允许您使用字符串格式来定义命令(尽管这很脆弱,不应该在实践中使用):
logfile = time.strftime("log_%d%b%Y_%H%M%S.txt")
rcmd = 'dir /OD > {}'.format(logfile)
os.system(rcmd)
不过,使用该subprocess
模块会更安全,以避免任何 shell 问题。
logfile = time.strftime("log_%d%b%Y_%H%M%S.txt")
with open(logfile, "w") as fh:
subprocess.run(['dir', '/OD'], stdout=fh)
推荐阅读
- excel - Excel VBA使用循环使用选定工作表中的值填充列表框
- asp.net-core - 如何构造多部分 MIME 以使 IsFileDisposition 返回 true(.NET Core 2+)
- apache-spark - Spark SQL - createDataFrame 错误的结构模式
- javascript - Frisby.js 使用可选的对象数组进行测试
- port - 当未指定时,Racket 的 servlet 如何决定在哪个端口上运行?
- r - 如何求解受条件 R 约束的函数
- django - Django 设置是否在 uwsgi 工作人员之间共享?
- excel - Excel 连接 - 编辑链接不起作用?
- python-3.x - 寻找通过多个函数传入变量的简单方法
- swift - 以编程方式禁用mac os x中的内置键盘?