在Python脚本中运行终端

在Python脚本中运行终端,python,terminal,Python,Terminal,我试图通过Python脚本在终端中运行命令。该命令只接受三个参数,在终端中执行时工作正常。以下是在命令行中输入的内容: gpmetis inputfile numberOfSections 无论inputfile来自何处,例如桌面,outputfile在执行gpmetis后被转储到同一位置(它被命名为inputfile.part.numberOfSections)gpmetis仅在终端中工作,但出于压缩目的,我想在Python脚本的中间使用它以节省时间。(我以前只是在终端和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
对象时。你们可以在这里了解更多:谢谢你们,我感谢你们的帮助和解释!从概念上讲,我在之前阅读该文档时感到困惑,但我将进行另一次尝试。