使用 python 转发 shell 命令
Forward a shell command using python
所以更准确地说,我想做的是:
- 阅读完整的 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)
结果是现在可以pythonmyPythonScript.py ls
,但是不知道怎么加选项。我知道我可以使用 parser.add_option
,但不知道如何让它适用于所有选项,因为我不想只使特定选项可用,但所有可能的选项取决于我的命令 运行.
我可以使用 parser.add_option('-*')
之类的东西吗?我怎样才能解析这些选项并用它的选项调用命令?
编辑
我需要我的程序来解析作为参数传递的所有类型的命令:python myScript.py ls -Fl
、python myScript.py git pull
、python myScript rm -rf *
等...
根据您的程序对命令行参数的依赖程度,您可以使用简单的路由。
读取命令行参数的简单方法
使用sys
获取python命令行的所有参数。
import sys
print sys.argv[1:]
然后就可以用subprocess
来执行了
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:])
所以更准确地说,我想做的是:
- 阅读完整的 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)
结果是现在可以pythonmyPythonScript.py ls
,但是不知道怎么加选项。我知道我可以使用 parser.add_option
,但不知道如何让它适用于所有选项,因为我不想只使特定选项可用,但所有可能的选项取决于我的命令 运行.
我可以使用 parser.add_option('-*')
之类的东西吗?我怎样才能解析这些选项并用它的选项调用命令?
编辑
我需要我的程序来解析作为参数传递的所有类型的命令:python myScript.py ls -Fl
、python myScript.py git pull
、python myScript rm -rf *
等...
根据您的程序对命令行参数的依赖程度,您可以使用简单的路由。
读取命令行参数的简单方法
使用sys
获取python命令行的所有参数。
import sys
print sys.argv[1:]
然后就可以用subprocess
来执行了
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:])