Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在nohup进程中尝试scp时出现预期错误_Scp_Pexpect_Nohup - Fatal编程技术网

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

在nohup进程中尝试scp时出现预期错误,scp,pexpect,nohup,Scp,Pexpect,Nohup,我有一个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()

我有一个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有问题

回溯(最近一次呼叫最后一次):
文件“scan_for_upload.py”,第39行,在
scp_to38()
文件“scan_for_upload.py”,第26行,在scp_至38中
child.interact()
文件“/app/anaconda3/envs/python37-1/lib/python3.7/site packages/pexpect/pty_spawn.py”,第788行,在interact中
mode=tty.tcgetattr(self.STDIN\u文件号)
termios.error:(25,“设备的ioctl不正确”)

我正在nohup进程中运行脚本,我认为这是导致此问题的原因。因为当我在控制台中运行脚本时,它工作得很好。如何使用pexpect模块在nohup进程中与scp密码交互?(我无法在我的环境中安装任何其他外部模块)

interact()
用于与生成的进程进行手动交互,它需要在tty上运行,但
nohup
不提供tty。您可以将
child.interact()
替换为
child.expect(pexpect.EOF,timeout=None)

而不是执行系统调用,请尝试此操作。不幸的是,我的环境没有scp软件包,无法安装任何外部软件包谢谢,看起来scp工作正常,但是日志给出了一条错误消息,说明超时已超过。你知道为什么吗?我应该在末尾添加child.close()之类的内容吗?通过再添加一个
timeout
param更新。默认情况下,超时时间为30秒。
 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')