scp后$?返回值异常?

发布于 2022-09-12 00:57:49 字数 1518 浏览 22 评论 0

环境描述:Python3.6

问题描述:我在脚本中执行了scp, scp成功后$?得到预期外的结果

test.sh代码

#!/bin/bash
# localfile为本地真实存在文件, remote_host为真实存在服务器ip。ssh配置已经配置过,并且单独执行test.sh没有问题
scp -q localfile remote_host:~/ 2>&1
echo $?
exit 0

worker.py代码

import subprocess
from multiprocessing import Process
import os
import signal
import sys
from multiprocessing import set_start_method

def _detach_with_context(executor):
    os.setsid()

    signal.signal(signal.SIGCHLD, signal.SIG_IGN)

    pid = os.fork()
    if pid > 0:
        sys.exit(0)

    try:
        if pid < 0:
            sys.exit(0)

        executor()
    except Exception as ex:
        pass
    finally:
        sys.exit(0)


def detach_execute(executor):
    try:
        p = Process(target=_detach_with_context, args=(executor,))

        p.start()
        p.join()
    except Exception as ex:
        pass


def execute():
    command='sh ./test.sh'

    p = subprocess.Popen(
        command.encode('utf-8'),
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE,
        shell=True,
        encoding='UTF-8'
    )
    print("code={}".format(''.join(p.stdout.readlines())))


if __name__ == '__main__':
    set_start_method('spawn')
    detach_execute(execute)

单独执行test.sh,$?是0, 但是运行python3 worker.py后 \$?就变成了1, scp -v查看过日志, 确认scp成功了。

为何$?值是1呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

°如果伤别离去 2022-09-19 00:57:49

能成功运行吗?
我试了下简单的
a.sh:

!/bin/sh

echo "cc"
echo $?
exit 0

然后直接用你的python文件,将except那里将ex打印出来提示
__init__() got an unexpected keyword argument 'encoding'

subprocess.Popen() 有 "encoding" 这个参数吗?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文