Python Subprocess.Popen和rdesktop

时间:2014-08-13 15:11:59

标签: python subprocess

我正在python中构建一个应用程序,以连接到分配给客户端系统的各种127.0.0地址,并使用该客户端的正确凭据。我遇到的问题是:#/ p>

ip = get_int('Which IP? 127.0.0.')
fullip = '127.0.0.{}'.format(ip)
print ('Connecting to {} on IP {}'.format(curr_client.client,fullip))
command1 = ['echo', curr_client.passwd]
command2 = ['/usr/bin/rdesktop',
            '-g 1900x1000',
            '-a 16',
            '-u {}'.format(curr_client.user),
            '-p -',
            '-d {}'.format(curr_client.domain),
            '-r disk:luke=/home/luke/Work\ Stuff',
            '{}:9389'.format(fullip)]
print(' '.join(command1)+'\n'+' '.join(command2))
p1 = Popen(command1, stdout=PIPE)
Popen(command2,
        stdout=DEVNULL,
        stdin=p1.stdout,
        stderr=None,
        close_fds=True,
        shell=False)

p1正确地回显了密码,我可以通过在两个命令之间推送一个打印(p1.communicate())来看到。

如果我取print(' '.join(command1)+'\n'+' '.join(command2))的输出并将回显管道传入rdesktop调用,它就能正常工作。

但是,从此应用内部启动时无法登录。实际的命令运行(从ps中拉出)看起来像(用户/域编辑):     /usr/bin/rdesktop -g 1900x1000 -a 16 -u ****** -pXX -d ***** -r disk:luke=/home/luke/Work\ Stuff 127.0.0.13:9389

根据我在登录屏幕上看到的内容,它尝试使用XX作为密码。

我哪里错了?

1 个答案:

答案 0 :(得分:1)

原来,popen正在做一些奇怪的间距。我取出了选项标识符和选项值之间的所有空格,现在它完美地工作了。

command2 = ['/usr/bin/rdesktop', '-g1900x1000', '-a16', '-u{}'.format(curr_client.user), '-p-', '-d{}'.format(curr_client.domain), '-rdisk:shared=/home/luke/Work\ Stuff', '{}:9389'.format(fullip)]