os.popen 如何将参数外部化到 运行 另一个脚本
How can os.popen take argument externaly to run another script
我正在尝试使用模块 python cmd 编写 python CLI 程序。当我尝试在我的 CLI 程序中执行另一个 python 脚本时,我的 objective 是我在其他文件夹中有一些 python 脚本,在其他文件夹中有 CLI 程序。我正在尝试使用 CLI 程序执行那些 python 脚本。
下面是os.popen用于执行其他脚本的方法有CLI程序:
import cmd
import os
import sys
class demo(cmd.Cmd):
def do_shell(self,line,args):
"""hare is function to execute the other script"""
output = os.popen('xterm -hold -e python %s' % args).read()
output(sys.argv[1])
def do_quit(self,line):
return True
if __name__ == '__main__':
demo().cmdloop()
而 hare 是错误的:
(Cmd) shell demo-test.py
Traceback (most recent call last):
File "bemo.py", line 18, in <module>
demo().cmdloop()
File "/usr/lib/python2.7/cmd.py", line 142, in cmdloop
stop = self.onecmd(line)
File "/usr/lib/python2.7/cmd.py", line 221, in onecmd
return func(arg)
TypeError: do_shell() takes exactly 3 arguments (2 given)
有一些 link 到其他 cmd CLI 程序
1 = cmd – Create line-oriented command processors
2 = Console built with Cmd object (Python recipe)
和一些屏幕截图以获取更多信息:
请在您的系统中运行上述代码。
如文档中所述:
https://pymotw.com/2/cmd/index.html
do_shell 定义如下:
do_shell(self, args):
但是你定义为
do_shell(self, line, args):
我认为预期用途是按照文档中的规定定义它。
我运行 你的代码并按照你的例子。我复制了你的错误。然后,按照 do_shell 的文档中的说明,我将方法更改为预期的方法:
do_shell(self, args):
从那里开始,缺少 sys
模块,因此您还需要导入它(除非您没有从源代码中复制它)。在那之后,我得到了 index out of 运行ge 的错误,可能是因为需要传递额外的参数。
此外,因为你在谈论 Python 脚本,我看不到你添加的额外命令的必要性,我只是将行更改为:
output = os.popen('python %s' % args).read()
但是,如果有特殊原因需要 xterm 命令,那么您可以将它放回去,它会适用于您的特定情况。
我也没有看到这个用例:
output(sys.argv[1])
我评论出来了。我 运行 你的代码,一切正常。我创建了一个测试文件,它只做了一个简单的打印,它 运行 成功了。
所以,代码实际上是这样的:
def do_shell(self, args):
"""hare is function to execute the other script"""
output = os.popen('python %s' % args).read()
print output
完整代码应如下所示:
import cmd
import os
import sys
class demo(cmd.Cmd):
def do_shell(self, args):
"""hare is function to execute the other script"""
output = os.popen('python %s' % args).read()
print output
def do_quit(self,line):
return True
if __name__ == '__main__':
demo().cmdloop()
我正在尝试使用模块 python cmd 编写 python CLI 程序。当我尝试在我的 CLI 程序中执行另一个 python 脚本时,我的 objective 是我在其他文件夹中有一些 python 脚本,在其他文件夹中有 CLI 程序。我正在尝试使用 CLI 程序执行那些 python 脚本。
下面是os.popen用于执行其他脚本的方法有CLI程序:
import cmd
import os
import sys
class demo(cmd.Cmd):
def do_shell(self,line,args):
"""hare is function to execute the other script"""
output = os.popen('xterm -hold -e python %s' % args).read()
output(sys.argv[1])
def do_quit(self,line):
return True
if __name__ == '__main__':
demo().cmdloop()
而 hare 是错误的:
(Cmd) shell demo-test.py
Traceback (most recent call last):
File "bemo.py", line 18, in <module>
demo().cmdloop()
File "/usr/lib/python2.7/cmd.py", line 142, in cmdloop
stop = self.onecmd(line)
File "/usr/lib/python2.7/cmd.py", line 221, in onecmd
return func(arg)
TypeError: do_shell() takes exactly 3 arguments (2 given)
有一些 link 到其他 cmd CLI 程序 1 = cmd – Create line-oriented command processors 2 = Console built with Cmd object (Python recipe)
和一些屏幕截图以获取更多信息:
请在您的系统中运行上述代码。
如文档中所述:
https://pymotw.com/2/cmd/index.html
do_shell 定义如下:
do_shell(self, args):
但是你定义为
do_shell(self, line, args):
我认为预期用途是按照文档中的规定定义它。
我运行 你的代码并按照你的例子。我复制了你的错误。然后,按照 do_shell 的文档中的说明,我将方法更改为预期的方法:
do_shell(self, args):
从那里开始,缺少 sys
模块,因此您还需要导入它(除非您没有从源代码中复制它)。在那之后,我得到了 index out of 运行ge 的错误,可能是因为需要传递额外的参数。
此外,因为你在谈论 Python 脚本,我看不到你添加的额外命令的必要性,我只是将行更改为:
output = os.popen('python %s' % args).read()
但是,如果有特殊原因需要 xterm 命令,那么您可以将它放回去,它会适用于您的特定情况。
我也没有看到这个用例:
output(sys.argv[1])
我评论出来了。我 运行 你的代码,一切正常。我创建了一个测试文件,它只做了一个简单的打印,它 运行 成功了。
所以,代码实际上是这样的:
def do_shell(self, args):
"""hare is function to execute the other script"""
output = os.popen('python %s' % args).read()
print output
完整代码应如下所示:
import cmd
import os
import sys
class demo(cmd.Cmd):
def do_shell(self, args):
"""hare is function to execute the other script"""
output = os.popen('python %s' % args).read()
print output
def do_quit(self,line):
return True
if __name__ == '__main__':
demo().cmdloop()