python - 如何在 Python 中使用子进程在文件名中添加变量
问题描述
我是 python 新手,想用变量名作为文件名创建一个文件-
例如两个变量是 - msid, serviceid 文件名应该是 serviceid.msid.req 在某个路径中,其中包含当前日期。
我写了这段代码 -
result = subprocess.run(
[
"cat `date` > ",
/Users/ngupta59/code/python-prm-example-agent/str(self.spec.serviceid).str(self.spec.msid).req,
],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
)
这是正确的方法吗?如果可以的话请帮忙
解决方案
是的,你这样做的方式是一个好方法(编程中没有“正确的方法”,因为你总是可以用至少两种方式做一件事,这两种方式各有利弊!)。但是您首先应该将路径放在引号中,以便它是一个字符串(现在它是一个不存在的无效变量名,它将引发 a SyntaxError
)。然后,您有多种可能将变量放入路径中:
- 使用字符串插值:
"/Users/ngupta59/code/python-prm-example-agent/%s.%s.req" % (str(self.spec.serviceid), str(self.spec.msid))
- 使用f 字符串(仅在 Python >= 3.6 中可用):
f"/Users/ngupta59/code/python-prm-example-agent/{str(self.spec.serviceid)}.{str(self.spec.msid)}.req"
- 将路径组件连接在一起,我不喜欢这种方式,因为您必须输入很多 + 符号和引号:
"/Users/ngupta59/code/python-prm-example-agent/" + str(self.spec.serviceid) + "." + str(self.spec.msid) + ".req"
- 使用
str.format
,但我从未使用过它,因为我认为百分号替换和 f 字符串更好。
如果您想要可在 Python 3 和 Python 2 上运行的代码,请使用字符串插值。如果您想要明显且易于理解的代码,请使用 f-strings。
附注:每个参数 forsubprocess.run
都应该放在一个单独的字符串中。以下是使用 f-strings 的完整代码:
result = subprocess.run(
[
"cat",
"`date`"
">",
f"/Users/ngupta59/code/python-prm-example-agent/{str(self.spec.serviceid)}.{str(self.spec.msid)}.req",
],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
)
推荐阅读
- css - Material-UI How to set minWidth and maxWidth of MenuItem (popover) according to the width of the select component
- c# - Cause of 'SqlTransaction has completed' error
- c# - HttpContext.User.Claims 控制器基础中的零元素
- android - What is SystemClock.elapsedRealtime - millisecond?
- sql - 具有不同行名的 SQL INNER JOIN 表
- sql - SQL 查询以查找目录路径的最后一段
- xamarin - 我应该使用 bundle_green 在手机上连接到 SQLite
- sapui5 - 如何根据登录用户绑定odata
- node.js - 在 MongoDb 和 Mongoose 中按子文档 ID 检索文档
- html - 我想在引导程序 4 中水平滚动