在Python脚本中运行终端
我试图通过Python脚本在终端中运行命令。该命令只接受三个参数,在终端中执行时工作正常。以下是在命令行中输入的内容:在Python脚本中运行终端,python,terminal,Python,Terminal,我试图通过Python脚本在终端中运行命令。该命令只接受三个参数,在终端中执行时工作正常。以下是在命令行中输入的内容: gpmetis inputfile numberOfSections 无论inputfile来自何处,例如桌面,outputfile在执行gpmetis后被转储到同一位置(它被命名为inputfile.part.numberOfSections)gpmetis仅在终端中工作,但出于压缩目的,我想在Python脚本的中间使用它以节省时间。(我以前只是在终端和Python之间来回
gpmetis inputfile numberOfSections
无论inputfile
来自何处,例如桌面,outputfile
在执行gpmetis
后被转储到同一位置(它被命名为inputfile.part.numberOfSections
)gpmetis
仅在终端中工作,但出于压缩目的,我想在Python脚本的中间使用它以节省时间。(我以前只是在终端和Python之间来回移动文件)
但这就是我遇到问题的地方。。。这提供了关于如何在Python中执行terminal的有用提示,但在运行Python代码时,我仍然没有收到outputfile
。这就像输出被抑制,或者我调用终端的方式有故障
我目前正在呼叫终端,如:
def Terminal(inputfile, NumParts):
os.system("gpmetis inputfile NumParts")
outputfile = "inputfile.part." + NumParts
return outputfile
我没有从中得到错误,但是我也没有收到任何输出文件。我遗漏了什么?如果你知道,你能解释一下吗?我正在努力学习Python,所以如果能描述一下我搞砸了什么,我将不胜感激
os
已导入。我在脚本中“返回”输出文件的方式可能有问题,但我在桌面上也没有看到输出文件,这是第一个要处理的问题(一步一步!)
注:我发现这是相关的,但它会帮助我吗?我很难理解它。此处
inputfile
是传递给函数的变量,但在命令行参数中,它被用作文件名
你可能想试试
os.system('gpmetis ' + str(inputfile) + ' ' + str(NumParts))
outputfile = intputfile + '.part.' + str(NumParts)
如果没有调用代码和意图,很难说。让我知道它是否有用。此处
inputfile
是传递给函数的变量,但在命令行参数中,它被用作文件名
你可能想试试
os.system('gpmetis ' + str(inputfile) + ' ' + str(NumParts))
outputfile = intputfile + '.part.' + str(NumParts)
如果没有调用代码和意图,很难说。如果有帮助,请告诉我。首先,您可以检查
os.system
的返回值。非零返回值通常表示发生了错误
看起来您正在尝试使用命令中的参数。在这种情况下,它应该如下所示:
def Terminal(inputfile, NumParts):
command = 'gpmetis ' + inputfile + ' ' + str(NumParts)
os.system(command)
outputfile = intputfile + '.part.' + str(NumParts)
return outputfile
最后,根据答案,使用子流程
模块可能会更好。然后可以执行如下相同的命令:
import subprocess
subprocess.call(['gpmetis', inputfile, str(NumParts)])
首先,您可以检查
os.system
的返回值。非零返回值通常表示发生了错误
看起来您正在尝试使用命令中的参数。在这种情况下,它应该如下所示:
def Terminal(inputfile, NumParts):
command = 'gpmetis ' + inputfile + ' ' + str(NumParts)
os.system(command)
outputfile = intputfile + '.part.' + str(NumParts)
return outputfile
最后,根据答案,使用子流程
模块可能会更好。然后可以执行如下相同的命令:
import subprocess
subprocess.call(['gpmetis', inputfile, str(NumParts)])
outputfile
仍然没有显示。我注意到您将'
放在两个字符串之间,它是否也应该介于'gpmetis'
和str(inputfile)
之间?我试图通过连接命令和参数来获取inputfile变量并形成命令。然后我将命令传递给os.system()call.ok。。谢谢你的解释!它仍然不起作用,但这是有意义的。outputfile
仍然没有显示。我注意到您将'
放在两个字符串之间,它是否也应该介于'gpmetis'
和str(inputfile)
之间?我试图通过连接命令和参数来获取inputfile变量并形成命令。然后我将命令传递给os.system()call.ok。。谢谢你的解释!它仍然不起作用,但这是有道理的。太棒了!这非常有效。我应该在什么时候使用os.system
或子流程
之间有区别吗?是的。您应该始终使用子流程
——os.system的文档甚至建议这样做。子流程
是在Python 2.4中添加的,以替换包括os.system在内的旧模块/函数。使用os.system
的调用更加简洁,但代价是功能减少<代码>子流程允许更好的错误处理和更多选项(例如管道),特别是在使用完整的子流程.Popen
对象时。你们可以在这里了解更多:谢谢你们,我感谢你们的帮助和解释!从概念上讲,我在之前阅读该文档时感到困惑,但我将再次尝试。太棒了!这非常有效。我应该在什么时候使用os.system
或子流程
之间有区别吗?是的。您应该始终使用子流程
——os.system的文档甚至建议这样做。子流程
是在Python 2.4中添加的,以替换包括os.system在内的旧模块/函数。使用os.system
的调用更加简洁,但代价是功能减少<代码>子流程允许更好的错误处理和更多选项(例如管道),特别是在使用完整的子流程.Popen
对象时。你们可以在这里了解更多:谢谢你们,我感谢你们的帮助和解释!从概念上讲,我在之前阅读该文档时感到困惑,但我将进行另一次尝试。