具体来说,我想要一个Python脚本,它接受来自用户的字符串并将该字符串解释为终端中的命令。换句话说,我的脚本应该可以按如下方式使用:
python testScript.py "command -arg1 -arg2 -arg3"
输出应如下:
command -arg1 -arg2 -arg3
执行带有3个参数的命令:arg1,arg2和arg3。
即,
python testScript.py "ls -lah"
输出当前目录的权限。
同样,
python testScript.py "/testarea ls -lah"
将输出目录的权限," / testarea"
任何建议或模块?
答案 0 :(得分:1)
运行任意用户输入通常被认为是一个坏主意©,但如果你真的想这样做:
#testScript.py
import sys, os
if __name__ == "__main__":
os.system(" ".join(sys.argv[1:]))
答案 1 :(得分:1)
最强大的方法是使用subprocess
模块。看看所有可能的选项。
答案 2 :(得分:1)
...不确定
最基本的方法是使用os:
import os, sys
os.system(sys.argv[1])
如果你想更好地控制通话,请看看 但是子进程模块。使用该模块,您也可以这样做 如上所述,但做了很多,比如捕获输出 命令并在程序中使用它
答案 3 :(得分:1)
这是我想出的最佳答案。我赞成任何曾说过使用subprocess
模块或者有一个很好的替代方案的人。
import subprocess, threading
class Command(object):
def __init__(self, cmd):
self.cmd = cmd
self.process = None
def run(self, timeout):
def target():
print 'Thread started'
self.process = subprocess.Popen(self.cmd, shell=True)
self.process.communicate()
print 'Thread finished'
thread = threading.Thread(target=target)
thread.start()
thread.join(timeout)
if thread.is_alive():
print 'Terminating process'
self.process.terminate()
thread.join()
print self.process.returncode
#This will run one command for 5 seconds:
command = Command("ping www.google.com")
command.run(timeout=5)
这将运行ping www.google.com
命令5秒钟然后超时。创建命令时,可以向列表中添加任意数量的参数,用空格分隔。
这是命令ls -lah
:
command = Command("ls -lah")
command.run(timeout=5)
一次运行中多个命令的示例:
command = Command("echo 'Process started'; sleep 2; echo 'Process finished'")
command.run(timeout=5)
简单而强大,就像我喜欢它一样!