如何使用Python的subprocess在文件名中添加变量

8 浏览
0 Comments

如何使用Python的subprocess在文件名中添加变量

我是Python的新手,想要创建一个以变量名作为文件名的文件。例如,两个变量是msid和serviceid。文件名应该是serviceid.msid.req,并且包含当前日期的某个路径。我写了这段代码:\n

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

\n这样做正确吗?如果可以,请帮助一下。

0
0 Comments

问题的原因是要在文件名中添加变量,但是目前的代码中并没有正确地将变量添加到文件名中。解决方法是使用字符串插值(string interpolation)或者f-strings来将变量添加到文件名中。

字符串插值的方法是使用百分号(%)来将变量插入到字符串中:

"/Users/ngupta59/code/python-prm-example-agent/%s.%s.req" % (str(self.spec.serviceid), str(self.spec.msid))

f-strings是一种新的字符串格式化方法,只在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"

如果想要在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,
)

0