Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将输出重定向到客户端_Python_Xml Rpc - Fatal编程技术网

Python 如何将输出重定向到客户端

Python 如何将输出重定向到客户端,python,xml-rpc,Python,Xml Rpc,我是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 stri

我是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命令也被破坏(即,即使发出该命令,我也无法更改到其他目录)。有什么方法可以这样做吗?如果有,怎么做?

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

我认为对于简单的用例,最好使用它,而不是直接使用
subprocess.Popen
。因此,如果我为用户创建一个工作目录,我是否将
os.cwd
命令放在服务器代码或客户端代码中?我认为应该将其作为要调用的远程方法的参数,然后使用服务器上的cwd=user\u目录调用您选择的子流程方法(实际上不要调用os.chdir)。或者,由于您似乎在服务器上处理用户,您可以保留用户到其目录的映射,并从那里获取目录。您的远程方法将少一个参数,但其实现将是相同的。@Barkuriu,这样我就可以
返回子进程。检查输出(命令)