【问题标题】:EOFError when running subprocess with fabric使用织物运行子进程时出现 EOFError
【发布时间】:2012-04-17 13:01:22
【问题描述】:

当我尝试 chown 目录时,Fabric 给了我一个 EOFError。只有当我从一个之前运行过 fabric 的 python 脚本运行一个子进程时才会发生这种情况。

来自我的fabfile:

...
with settings(warn_only=True):
    run('python my_scripts/import_local.py')
sudo('chown www-data:www-data /opt/mm/my_project/uploads -R')

如果我从my_scripts/import_local.py 中评论以下行,我不会收到任何错误:

    p = subprocess.Popen(command.split(), stdout=subprocess.PIPE,
                         stderr=subprocess.PIPE)
    result = p.communicate()[0].splitlines()
    if result:
        print result

使用留下的子进程行,我得到了这个回溯(使用 --show=debug 运行):

[xx.xx.xxx.xxx] sudo: sudo -S -p 'sudo password:'  /bin/bash -l -c "cd /opt/mm/my_project/current && source environment.sh && chown www-data:www-data /opt/mm/my_project/uploads -R"
Traceback (most recent call last):
  File "/Users/jesse.aldridge/.virtualenvs/my_project/lib/python2.6/site-packages/fabric/main.py", line 682, in main
    *args, **kwargs
  File "/Users/jesse.aldridge/.virtualenvs/my_project/lib/python2.6/site-packages/fabric/tasks.py", line 232, in execute
    task.run(*args, **new_kwargs)
  File "/Users/jesse.aldridge/.virtualenvs/my_project/lib/python2.6/site-packages/fabric/tasks.py", line 105, in run
    return self.wrapped(*args, **kwargs)
  File "/Users/jesse.aldridge/Dropbox/my_code/my_project/fabfile.py", line 162, in do_reimport
    sudo('chown www-data:www-data /opt/mm/my_project/uploads -R')
  File "/Users/jesse.aldridge/.virtualenvs/my_project/lib/python2.6/site-packages/fabric/network.py", line 343, in host_prompting_wrapper
    return func(*args, **kwargs)
  File "/Users/jesse.aldridge/.virtualenvs/my_project/lib/python2.6/site-packages/fabric/operations.py", line 976, in sudo
    user=user)
  File "/Users/jesse.aldridge/.virtualenvs/my_project/lib/python2.6/site-packages/fabric/operations.py", line 867, in _run_command
    combine_stderr)
  File "/Users/jesse.aldridge/.virtualenvs/my_project/lib/python2.6/site-packages/fabric/operations.py", line 753, in _execute
    channel.get_pty(width=cols, height=rows)
  File "/Users/jesse.aldridge/.virtualenvs/my_project/lib/python2.6/site-packages/ssh/channel.py", line 158, in get_pty
    self._wait_for_event()
  File "/Users/jesse.aldridge/.virtualenvs/my_project/lib/python2.6/site-packages/ssh/channel.py", line 1084, in _wait_for_event
    raise e
EOFError
Disconnecting from xx.xx.xxx.xxx... done.

【问题讨论】:

  • 看起来是 sudo 的问题。也许这个用户需要密码才能运行 sudo?
  • 当我在脚本的其他地方执行 sudo 时,fabric 会提示我输入密码。
  • 如果不使用子流程 PIPE 会发生什么?或者,如果您在 fabfile 的两行之间添加一点 time.sleep

标签: python ssh subprocess fabric


【解决方案1】:

运行时会发生什么:

$ ssh xx.xx.xxx.xxx -t'sudo -S -p "sudo password:"  /bin/bash -l -c "cd /opt/mm/my_project/current && source environment.sh && chown www-data:www-data /opt/mm/my_project/uploads -R"'

【讨论】:

    猜你喜欢
    • 2019-01-26
    • 1970-01-01
    • 2018-02-17
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多