从 python 运行 nohup 和 eval

Posted

技术标签:

【中文标题】从 python 运行 nohup 和 eval【英文标题】:Run nohup and eval from python 【发布时间】:2016-01-19 11:49:52 【问题描述】:

我需要运行两个命令(从 shell 看起来像)

$ eval `ssh-agent -s`
Agent pid 8631
$ ssh-add ~/.ssh/user

注意:密钥在/home/user/.ssh/user 中且正确

运行就像 bash 脚本一样工作:

#!/bin/bash
nohup `eval `ssh-agent -s`` >/dev/null 2>&1 &
ssh-add ~/.ssh/$user

但我无法从 python 开始工作,ssh-agent 已启动,但 ssh-add 返回:无法打开与您的身份验证代理。

import os
os.system('nohup \'eval `ssh-agent -s`\' &')
os.system('ssh-add /home/user/.ssh/user')

我试过了:

import os
system('nohup sh -c \'eval `ssh-agent -s`\' &')

同样的问题 ssh-agent 启动了,但不知何故我无法连接

【问题讨论】:

【参考方案1】:

os.system 的作用是为每个命令启动不同的 shell。而eval `ssh-agent -s` 所做的是启动一个新的ssh-agent 并在当前shell 中存储一些与它通信所需的环境变量。最后,ssh-add 使用该变量来访问 ssh-agent 代理以向其添加新密钥。

所以你需要在同一个 shell 上执行这两个命令。您可以通过对os.system 的唯一调用来依次调用这两个命令来做到这一点:

os.system("eval `ssh-agent -s`; ssh-add /home/user/.ssh/user")

【讨论】:

似乎工作,我得到: ssh_askpass: exec(/usr/bin/ssh-askpass): No such file or directory 因为我的私钥受密码保护。但是当我添加 pexpect 来获取输出并传递密码时,我得到了:pexpect.ExceptionPexpect: The command was not found or is not executable: eval.

以上是关于从 python 运行 nohup 和 eval的主要内容,如果未能解决你的问题,请参考以下文章

PYTHON的程序在LINUX后台运行

Python后台运行—nohup

nohup 后台不挂断运行程序

python nohup linux 后台运行输出

nohup执行python脚本看不到log

使用nohup在后台执行python程序时需要增加-u选项才能马上通过print()输出日志