Python 如何将输出重定向到客户端
我是Python方面相对较新的程序员,我创建了以下XMLRPC服务器函数: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
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,这样我就可以返回子进程。检查输出(命令)
?