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