scp后$?返回值异常?
环境描述: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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
能成功运行吗?
我试了下简单的
a.sh:
!/bin/sh
echo "cc"
echo $?
exit 0
然后直接用你的python文件,将except那里将ex打印出来提示
__init__() got an unexpected keyword argument 'encoding'
subprocess.Popen() 有 "encoding" 这个参数吗?