【问题标题】:How to redirect output to client如何将输出重定向到客户端
【发布时间】:2013-02-14 06:27:53
【问题描述】:

我是一个相对较新的 Python 程序员,我创建了这个 XMLRPC Server 函数如下:

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 命令也坏了(即即使发出命令,我也无法切换到其他目录)。有没有办法这样做,如果有,怎么做?

【问题讨论】:

    标签: python xml-rpc


    【解决方案1】:

    os.system 不将输出返回到命令行,只返回返回码。如果要捕获 stdout/stderr,则必须使用 subprocess.Popen。然后,您还可以提供一个工作目录来执行您的命令(使用 cwd 参数)。据我所知, cd 可能在 shell 中工作,但不会更改 python 实例的工作目录。因此,下一次调用将不会在您更改到的目录中运行。将 Popen 与 cwd 一起使用应该可以。

    【讨论】:

    • 我认为对于简单的用例,最好使用subprocess.check_output而不是直接使用subprocess.Popen
    • 那么如果我为用户创建一个工作目录,我是把os.cwd命令放在服务器代码还是客户端代码中?
    • 我认为您应该将其作为要调用的远程方法的参数,然后在服务器上使用 cwd=user_directory 调用您选择的子进程方法(实际上不要调用 os.chdir )。或者,由于您似乎让用户在服务器上处理,您可以保留用户到他们的目录的映射并从那里获取目录。你的远程方法会少一个参数,但它的实现是一样的。
    • @Barkuriu 所以我可以return subprocess.check_output(command)?
    猜你喜欢
    • 1970-01-01
    • 2012-02-29
    • 2016-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 2022-11-11
    相关资源
    最近更新 更多