相关疑难解决方法(0)

为什么将stdin提供给subprocess.Popen会导致写入stdout的内容发生变化?

我正在使用Python的subprocess.Popen使用主机操作系统的二进制客户端执行一些FTP.由于各种原因,我无法使用ftplib或任何其他库.

如果我将stdin处理程序附加到Popen实例,则二进制文件的行为似乎会发生变化.例如,使用XP的ftp客户端,它接受要发出的命令的文本文件:

>>>from subprocess import Popen, PIPE  
>>>p = Popen(['ftp','-A','-s:commands.txt','example.com'], stdout=PIPE)  
>>>p.communicate()[0]  
'Connected to example.com.  
220 ProFTPD 1.3.1 Server (Debian) ...   
331 Anonymous login ok, send your complete email address as your password  
<snip>
ftp> binary  
200 Type set to I  
ftp> get /testfiles/100.KiB  
200 PORT command successful  
150 Opening BINARY mode data connection for /testfiles/100.KiB (102400 bytes)  
226 Transfer complete  
ftp: 102400 bytes received in 0.28Seconds 365.71Kbytes/sec.  
ftp> quit  
>>>
Run Code Online (Sandbox Code Playgroud)

commands.txt中:

binary  
get /testfiles/100.KiB  
quit  
Run Code Online (Sandbox Code Playgroud)

当还提供stdin时,stdout中的所有内容是:

>>>from subprocess import …
Run Code Online (Sandbox Code Playgroud)

python stdin subprocess stdout popen

6
推荐指数
2
解决办法
3669
查看次数

标签 统计

popen ×1

python ×1

stdin ×1

stdout ×1

subprocess ×1