使用python转发shell命令

使用python转发shell命令,python,shell,subprocess,optionparser,Python,Shell,Subprocess,Optionparser,更确切地说,我想做的是: 阅读完整的shell命令作为python脚本的参数,如:python myPythonScript.py ls-Fl 当我想在python脚本中调用该命令时(在某些文件夹上进行一些循环并应用该命令等…) 我试过这个: import subprocess from optparse import OptionParser from subprocess import call def execCommand(cmd): call(cmd) if _

更确切地说,我想做的是:

  • 阅读完整的shell命令作为python脚本的参数,如:
    python myPythonScript.py ls-Fl
  • 当我想在python脚本中调用该命令时(在某些文件夹上进行一些循环并应用该命令等…)
我试过这个:

import subprocess
from optparse import OptionParser
from subprocess import call
def execCommand(cmd):
        call(cmd)


if __name__ == '__main__':
        parser = OptionParser()
        (options,args) = parser.parse_args()
        print args
        execCommand(args)
结果是现在我可以使用python
myPythonScript.py ls
,但我不知道如何添加选项。我知道我可以使用
解析器。添加_option
,但不知道如何使其适用于所有选项,因为我不想只提供特定选项,而是根据我正在运行的命令提供所有可能的选项。 我可以使用类似于
解析器的东西吗?添加选项('-*')
?那么,我如何解析选项并使用其选项调用命令呢

编辑


我需要我的程序解析作为参数传递的所有类型的命令:
python myScript.py ls-Fl
python myScript.py git pull
python myScript rm-rf*
等…

根据您的程序对命令行参数的依赖程度,您可以使用简单的路径

读取命令行参数的简单方法 使用
sys
获取python命令行的所有参数

import sys
print  sys.argv[1:]
然后您可以使用
子流程执行它

from subprocess import call
# e.g. call(["ls", "-l"])
call(sys.argv[1:])
下面这个示例对我来说很好

import sys 
from subprocess import call
print(sys.argv[1:])
call(sys.argv[1:])

根据程序对命令行参数的依赖程度,可以使用简单的路由

读取命令行参数的简单方法 使用
sys
获取python命令行的所有参数

import sys
print  sys.argv[1:]
然后您可以使用
子流程执行它

from subprocess import call
# e.g. call(["ls", "-l"])
call(sys.argv[1:])
下面这个示例对我来说很好

import sys 
from subprocess import call
print(sys.argv[1:])
call(sys.argv[1:])

OptionParser
在您自己的程序想要处理参数时非常有用:它可以帮助您将字符串参数转换为布尔值、整数、列表项或其他形式。在您的例子中,您只想将参数传递给正在调用的程序,因此不必麻烦使用
OptionParser
。只需传递
sys.argv
中给出的参数即可

subprocess.call(sys.argv[1:])

OptionParser
在您自己的程序想要处理参数时非常有用:它可以帮助您将字符串参数转换为布尔值、整数、列表项或其他形式。在您的例子中,您只想将参数传递给正在调用的程序,因此不必麻烦使用
OptionParser
。只需传递
sys.argv
中给出的参数即可

subprocess.call(sys.argv[1:])

当我知道要调用的选项类型时,我需要我的程序解析作为参数传递的所有类型的命令:
python myScript.py ls-Fl
python myScript.py git pull
python myScript rm-rf*
etc…在正文中添加了带有“subprocess”的示例。你知道为什么这不能与
python myScript.py cd一起使用吗?
例如,当我知道要调用的选项类型时,这一点适用,我需要我的程序解析作为参数传递的所有类型的命令:
python myScript.py ls-Fl
python myScript.py git pull
python myScript rm-rf*
etc…在正文中添加了带有“subprocess”的示例。你知道这为什么不能与
python myScript.py cd一起使用吗?
举个例子。感谢我所需要的,你有关于sys的一些文档,因为我可能想稍微操纵一下参数。哦,这是我第一次使用python,我刚刚意识到sys是解读论点的基本方式。非常感谢。我用
python myScript.py cd-
尝试了该代码,但它返回了一个错误。你知道为什么吗?感谢我所需要的,你有一些关于sys的文档,因为我可能想操纵一些参数。哦,这是我第一次使用python,我刚刚意识到sys是读取参数的基本方式。非常感谢。我用
python myScript.py cd-
尝试了该代码,但它返回了一个错误。你知道为什么吗?