尝试在 nohup 进程中执行 scp 时出现预期错误

pexpect error when trying to scp in a nohup process

我有一个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).