return 如何从 python 脚本到 shell 脚本?
How to return result from python script to shell script?
我有一个 python 脚本 a.py
,它是 shell 脚本 b.sh
的 运行。我希望 return a.py
的结果(整数)到 b.sh
。
我知道我可以在 a.py
中使用 sys.exit(result)
。但是正如我在 b.sh
中写的 set -ex
,shell 脚本在 运行 宁 a.py
之后停止。我不想使用 print(result)
eater,因为我希望在 a.py
.
中打印其他信息
是否有任何其他方法可以将 return 从 a.py
转换为 b.sh
?
您可以 return 来自 python 脚本的退出代码,并通过 $?
在 shell 脚本中查找(并在必要时重新分配给另一个变量) :
foo.py:
import sys
sys.exit(35)
foo.sh:
python foo.py
echo $?
运行 脚本:
> sh foo.sh
35
你可以这样做:
{ a.py; result=$?; } || true
# the result of a.py is in $result
|| true
暂时禁用 set -e
,并且 $?
特殊变量在被下一个命令覆盖之前存储到 $result
。
缺点是,如果您的脚本实际上失败了(例如通过引发异常),您不会注意到这一点。一个更强大的解决方案是打印所需的结果并将其作为输出捕获,并将其他输出打印到标准错误。
我同意 chepner,退出代码不应用于整数传递。
为什么不通过标准输出传递 python 文件的输出?
value="$(python foo.py)"
echo "${value}"
我建议将整数值写入文件。我完全同意退出代码不应用于传递任何信息,除了程序的成功或失败。
例如b.sh:
#! /bin/bash
set -ex
# Create temp file, ensure it is erased on bash script exit
tempfile="$(mktemp)"
trap 'rm -f "$tempfile"' EXIT
trap 'exit 1' HUP INT QUIT PIPE TERM
# Run program and write value to temp file
python3 ./a.py -o "$tempfile"
# Read value from temp file
myvalue="$(cat "$tempfile")"
echo "Value from a.py was: $myvalue"
和a.py:
#! /usr/bin/env python3
import argparse
from pathlib import Path
parser = argparse.ArgumentParser()
parser.add_argument(
"-o",
"--output-file",
help="Write integer value to text file",
type=str,
required=True,
)
args = parser.parse_args()
my_value = 42
Path(args.output_file).write_text(str(my_value))
我有一个 python 脚本 a.py
,它是 shell 脚本 b.sh
的 运行。我希望 return a.py
的结果(整数)到 b.sh
。
我知道我可以在 a.py
中使用 sys.exit(result)
。但是正如我在 b.sh
中写的 set -ex
,shell 脚本在 运行 宁 a.py
之后停止。我不想使用 print(result)
eater,因为我希望在 a.py
.
是否有任何其他方法可以将 return 从 a.py
转换为 b.sh
?
您可以 return 来自 python 脚本的退出代码,并通过 $?
在 shell 脚本中查找(并在必要时重新分配给另一个变量) :
foo.py:
import sys
sys.exit(35)
foo.sh:
python foo.py
echo $?
运行 脚本:
> sh foo.sh
35
你可以这样做:
{ a.py; result=$?; } || true
# the result of a.py is in $result
|| true
暂时禁用 set -e
,并且 $?
特殊变量在被下一个命令覆盖之前存储到 $result
。
缺点是,如果您的脚本实际上失败了(例如通过引发异常),您不会注意到这一点。一个更强大的解决方案是打印所需的结果并将其作为输出捕获,并将其他输出打印到标准错误。
我同意 chepner,退出代码不应用于整数传递。 为什么不通过标准输出传递 python 文件的输出?
value="$(python foo.py)"
echo "${value}"
我建议将整数值写入文件。我完全同意退出代码不应用于传递任何信息,除了程序的成功或失败。
例如b.sh:
#! /bin/bash
set -ex
# Create temp file, ensure it is erased on bash script exit
tempfile="$(mktemp)"
trap 'rm -f "$tempfile"' EXIT
trap 'exit 1' HUP INT QUIT PIPE TERM
# Run program and write value to temp file
python3 ./a.py -o "$tempfile"
# Read value from temp file
myvalue="$(cat "$tempfile")"
echo "Value from a.py was: $myvalue"
和a.py:
#! /usr/bin/env python3
import argparse
from pathlib import Path
parser = argparse.ArgumentParser()
parser.add_argument(
"-o",
"--output-file",
help="Write integer value to text file",
type=str,
required=True,
)
args = parser.parse_args()
my_value = 42
Path(args.output_file).write_text(str(my_value))