【问题标题】:what is the different about subprocess.call in python between direct command line input?python中的subprocess.call在直接命令行输入之间有什么不同?
【发布时间】:2014-05-22 11:52:02
【问题描述】:

我在使用 python 脚本调用 FEM 软件 Abaqus 时遇到问题。就这个: 当我使用脚本启动 abaqus 作业时,abaqus 被调用,但在软件内的预处理过程中发生错误:

subprocess.call(["abaqus job=job_name oldjob=oldjob_name user=user.for int  scratch=C:\Temp"],shell=True)

但是当我直接在命令行中调用“abaqus job=job_name oldjob=oldjob_name user=user.for int scratch=C:\Temp”时,它起作用了。 这两种方式有区别吗?

【问题讨论】:

  • 调用它时遇到什么具体错误?可以分享一下 Traceback 吗?
  • 感谢您的关注。作业文件在脚本中修改而没有关闭是我的粗心大意,导致作业文件在子进程调用中不可用。所以这个问题没有意义,我会关闭它。

标签: python shell subprocess


【解决方案1】:

你需要拆分你的参数列表:

subprocess.call(["abaqus", "job=job_name", "oldjob=oldjob_name", "user=user.for", "int", "scratch=C:\Temp"], shell=True)

这告诉call 这些是单独的参数。如果你传递一个长字符串,它认为这是一个参数。

【讨论】:

  • 感谢您的回复。但它也不起作用。在 Windows 中,它无需拆分参数列表即可工作。看来abaqus中的pre.exe在上面两种方式的工作方式不同。
  • 如果你使用shell=True,你实际上不应该像这样拆分参数列表。整个命令应该在一个字符串中。
猜你喜欢
  • 2015-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-20
  • 2015-01-13
  • 2013-02-22
  • 2012-01-31
  • 2021-05-15
相关资源
最近更新 更多