-1

モジュール python cmd を使用して python CLI プログラムを作成しようとしています。CLI プログラムで別の python スクリプトを実行しようとすると、私の目的は、他のフォルダーにいくつかの python スクリプトがあり、他のフォルダーに CLI プログラムがあることです。CLI プログラムを使用してこれらの python スクリプトを実行しようとしています。

以下は、CLI プログラムがある他のスクリプトを実行するために使用される os.popen メソッドです。

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()

うさぎはエラーです:

(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)

他の cmd CLI プログラムへのリンクがあります 1 = cmd – ライン指向のコマンド プロセッサを作成します 2 = Cmd オブジェクトで構築されたコンソール (Python レシピ)

詳細については、スクリーンショットをご覧ください。 ここに画像の説明を入力

システムで上記のコードを実行してください。

4

1 に答える 1

1

ドキュメントで指定されているとおり:

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モジュールが欠落していたので、それもインポートする必要があります (ソースからコピーしなかった場合を除きます)。その後、おそらく追加のパラメーターを渡す必要があると予想されるため、範囲外のインデックスのエラーが発生しました。

さらに、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()
于 2015-10-04T19:35:47.277 に答える