2

私は Python の比較的新しいプログラマーであり、この XMLRPC サーバー関数を次のように作成しました。

def shell(self, command, username):
    if username in loggedIn:
        return os.system(command)
    else:
        string = time.asctime() , " not logged in"
        string = "".join(string)
        return string

クライアント側のために、私は書いた

command = raw_input ("$ ")
if command == "exit":
    exit()
else:
    server.shell(command, username)

ただし、クライアント プログラムでコマンドを実行すると、出力は次のようにクライアント ウィンドウではなくサーバー ウィンドウに表示されます。

#client side
$ ls

#server side
#some results
localhost - - [14/Feb/2013 14:26:25] "POST /RPC2 HTTP/1.0" 200 -

また、cd コマンドも壊れています (つまり、コマンドを発行しても他のディレクトリに移動できませんでした)。そうする方法はありますか?

4

1 に答える 1

0

os.system はコマンド ラインに出力を返さず、リターン コードのみを返します。stdout/stderr をキャプチャする場合は、subprocess.Popen を使用する必要があります。次に、コマンドを実行する作業ディレクトリを指定することもできます (cwd 引数を使用)。私の知る限り、cd はシェルで動作する可能性がありますが、python インスタンスの作業ディレクトリは変更されません。したがって、次の呼び出しは、変更したディレクトリでは実行されません。cwd で Popen を使用すると動作するはずです。

于 2013-02-14T08:15:24.027 に答える