如何解决尝试在 nohup 进程中执行 scp 时出现 pexpect 错误
我有一个 scp 函数如下:
def scp_to38():
child = pexpect.spawn(f"scp {tar_file_path} bbmprd@10.82.20.38:/app2/upload/")
child.expect(f"bbmprd@10.82.20.38's password:")
child.sendline("password")
child.interact()
print(f'{tar_file_path} SENT TO 38:/app2/upload/')
它给我一个错误,说 child.interact() 有问题
Traceback (most recent call last):
File "scan_for_upload.py",line 39,in <module>
scp_to38()
File "scan_for_upload.py",line 26,in scp_to38
child.interact()
File "/app/anaconda3/envs/python37-1/lib/python3.7/site-packages/pexpect/pty_spawn.py",line 788,in interact
mode = tty.tcgetattr(self.STDIN_FILENO)
termios.error: (25,'Inappropriate ioctl for device')
我在 nohup 进程中运行脚本,我相信这是导致此问题的原因。因为当我在控制台中运行脚本时,它工作正常。如何使用 pexpect 模块在 nohup 进程中与 scp 密码交互? (我无法在我的环境中安装任何其他外部模块)
解决方法
interact()
用于与衍生进程的手动交互,它需要在 tty 上运行,但 nohup
不提供 tty。您可以将 child.interact()
替换为 child.expect(pexpect.EOF,timeout=None)
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。