【问题标题】:How to add variables in file name using subprocess in Python [duplicate]如何在Python中使用子进程在文件名中添加变量[重复]
【发布时间】:2021-07-10 08:09:45
【问题描述】:

我是 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,
)

这是正确的方法吗?可以的话请帮忙

【问题讨论】:

  • 如果我的回答对您有帮助,请使用左侧的灰色复选标记接受。这使接受答案的作者 +15 声望,问题作者 +2 声望。
  • 与将变量插入任何其他字符串的方式相同。
  • 我通过将您的问题标题复制并粘贴到搜索引擎中,找到了我链接的最后一个重复项以及许多其他可能有用的资源。

标签: python python-3.x subprocess


【解决方案1】:

是的,你做这件事的方式是一个好方法(编程中没有“正确的方法”,因为你总是可以用至少两种方式做一件事,这两种方式各有利弊!)。但是您首先应该将路径放在引号中,以便它是一个字符串(现在它是一个不存在的无效变量名,它将引发SyntaxError)。然后,您有多种可能将变量放入路径中:

  1. 使用string interpolation:
"/Users/ngupta59/code/python-prm-example-agent/%s.%s.req" % (str(self.spec.serviceid), str(self.spec.msid))
  1. 使用f-strings(仅在 Python >= 3.6 中可用):
f"/Users/ngupta59/code/python-prm-example-agent/{str(self.spec.serviceid)}.{str(self.spec.msid)}.req"
  1. 将路径组件连接在一起,我不喜欢这种方式,因为您必须输入很多 + 符号和引号:
"/Users/ngupta59/code/python-prm-example-agent/" + str(self.spec.serviceid) + "." + str(self.spec.msid) + ".req"
  1. 使用str.format,但我从未使用过它,因为我认为百分号替换和 f 字符串更好。

如果您想要可在 Python 3 和 Python 2 上运行的代码,请使用字符串插值。如果您想要清晰易懂的代码,请使用 f-strings。

附注:subprocess.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,
)

【讨论】:

  • 为我工作,谢谢@Programmer
猜你喜欢
  • 1970-01-01
  • 2022-01-19
  • 2014-04-29
  • 2017-05-19
  • 1970-01-01
  • 2015-07-11
  • 2019-04-20
  • 1970-01-01
  • 2014-09-19
相关资源
最近更新 更多