使用subprocess.Popen时如何正确的重定向所有输入输出? - V2EX
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
sandtears

使用subprocess.Popen时如何正确的重定向所有输入输出?

  •  
  •   sandtears Jul 31, 2013 8074 views
    This topic created in 4673 days ago, the information mentioned may be changed or developed.
    我使用了
    subprcess.Popen("ssh -qTfNg -D 8999 user@hostname", shell = True, stdin = subprocess.PIPE, stdout = subprocess.PIPE, stderr = subprocess.PIPE)

    但是还是没有办法得到获取到ssh命令要求password的那个提示,也没法输入密码orz,现在用pexpect模块实现了我想要的功能,但是还是很好奇为什么subprocess不可以。
    7 replies    1970-01-01 08:00:00 +08:00
    cloverstd
        1
    cloverstd  
       Aug 1, 2013 via Android
    要用 ssh 的标准输入读取
    我之前是用 sudo,sudo 有一个参数是从标准输入读取密码
    timonwong
        2
    timonwong  
       Aug 1, 2013
    ssh命令的password输入需要一个terminal, popen是用pty.fork()实现的,挂上一个pseudo terminal获取输入。
    lenciel
        3
    lenciel  
       Aug 1, 2013
    由于安全上的考虑,ssh (还有scp, sftp)这些命令是直接和console交互的,你平时敲在terminal的password是console直接给它们而不是它们从STDIN读取。想在pipe里面传password是不行的。你实在是要做有很多办法:

    1. 用Popen发命令 echo "password" | ssh user@hostname
    2. 用paramiko
    3. 用pexpect

    1最不安全因为密码在代码里面,2最简单。
    sandtears
        4
    sandtears  
    OP
       Aug 1, 2013
    @cloverstd 3Q 等我去看看sudo的Man page
    sandtears
        5
    sandtears  
    OP
       Aug 1, 2013
    @timonwong 结合3楼的差不多理解原理了,多谢回复
    sandtears
        6
    sandtears  
    OP
       Aug 1, 2013
    @lenciel 嗯嗯,谢谢我回去看看
    sandtears
        7
    sandtears  
    OP
       Aug 1, 2013
    @lenciel 第一个似乎也是无效的,第二三个可用,多谢
    About     Help     Advertise     Blog     API     FAQ     Solana     2588 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 37ms UTC 16:01 PVG 00:01 LAX 09:01 JFK 12:01
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86