【问题标题】:Passing multiple arguments in os.system在 os.system 中传递多个参数
【发布时间】:2021-08-10 18:16:51
【问题描述】:

我正在开发一个 gui,按一下按钮,它应该会启动一个软件“ansa”并加载一个将 3 个文件合并在一起的脚本。

这个输入参数是一个文件路径,以便脚本可以加载这个文件。

这是我目前在 python 中使用的命令:

os.system("start ansa -exec load_script: 'ansa123.py' -exec \"foo('" + self.path[0] + "')\"")

self.path[0] 是在 gui python 代码中存储为局部变量的文件路径,ansa123.py 是要加载到 ansa 中的脚本

这就是脚本 ansa123.py 加载输入参数的方式:(函数 foo 作为输入传递给脚本)

def foo(fileName):

这适用于一个参数,但我想发送 3 个参数,它们对应于存储为字符串的 3 个文件路径。

当我发送 3 个参数时出现错误:

TypeError: system() 最多接受 1 个参数(给定 3 个)

【问题讨论】:

  • 你如何“发送 3 个参数”?请显示您用于该命令的完整代码。也可以考虑改用 QProcess。
  • 我尝试使用逗号分隔它们。 os.system("start ansa -exec load_script: 'Merge_Script.py' -exec \"foo('" + (self.mergefile0, self.mergefile1, self.mergefile2) + "') \"") 我知道这不正确,我不知道正确的方法。你能告诉我如何使用 QProcess 吗?我在编程方面不是很有经验。谢谢。

标签: python command-line-arguments


【解决方案1】:

首先,您需要更改foo(),使其可以接受多个文件名参数。

def foo(*filenames):

foo() 的代码应该会遍历所有文件名。

然后更改您的 os.system() 调用,使其在每个文件名周围加上引号,而不是整个参数列表。

filenames = ",".join([f"'{filename}'" for filename in self.path])
os.system(f"start ansa -exec load_script: 'ansa123.py' -exec \"foo(${filenames})\"")

【讨论】:

  • 嘿,谢谢你。它确实有效,我也通过传递一个 lambda 函数进行了尝试,它有效。以下是相同的语法: os.system("start ansa -exec load_script: 'ansa123.py' -exec \"foo("+ ','.join(map(lambda x: "'" + str(x) + "'", listofstrings)) +") \"")
  • 当然,这是等价的,只是不太清楚 IMO。
  • 尽可能多地挤在一行上是没有奖品的。
  • 除了我忘了用逗号加入。
  • 你说得对,我应该尽量保持简单。但是,是的,我尝试更改它,因为存在语法错误,我花了一段时间才弄清楚。
猜你喜欢
  • 2013-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-01
  • 2012-05-20
  • 2012-07-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多