Hướng dẫn python return value to shell - python trả lại giá trị cho shell

Tôi là người mới ở Python. Tôi đang tạo một kịch bản Python trả về một chuỗi "Hello World." Và tôi đang tạo ra một kịch bản shell. Tôi đang thêm một cuộc gọi từ vỏ vào một kịch bản Python.

  1. Tôi cần chuyển các đối số từ vỏ đến Python.
  2. Tôi cần in giá trị được trả về từ Python trong tập lệnh Shell.

Đây là mã của tôi:

shellscript1.sh

#!/bin/bash
# script for testing
clear
echo "............script started............"
sleep 1
python python/pythonScript1.py
exit

pythonScript1.py

#!/usr/bin/python
import sys

print "Starting python script!"
try:
    sys.exit['helloWorld1'] 
except:
     sys.exit['helloWorld2'] 

aschultz

1.6183 Huy hiệu vàng18 Huy hiệu bạc 30 Huy hiệu Đồng3 gold badges18 silver badges30 bronze badges

Đã hỏi ngày 9 tháng 12 năm 2015 lúc 5:46Dec 9, 2015 at 5:46

Abdul Manafabdul ManafAbdul Manaf

4.7338 Huy hiệu vàng49 Huy hiệu bạc94 Huy hiệu Đồng8 gold badges49 silver badges94 bronze badges

0

Bạn không thể trả lại thông báo dưới dạng mã thoát, chỉ số. Trong bash, nó có thể truy cập thông qua

#!/usr/bin/python
import sys

print "Starting python script!"
try:
    sys.exit['helloWorld1'] 
except:
     sys.exit['helloWorld2'] 
7. Ngoài ra, bạn có thể sử dụng
#!/usr/bin/python
import sys

print "Starting python script!"
try:
    sys.exit['helloWorld1'] 
except:
     sys.exit['helloWorld2'] 
8 để truy cập các tham số mã:

import sys
if sys.argv[1]=='hi':
    print 'Salaam'
sys.exit[0]

trong vỏ bọc:

#!/bin/bash
# script for tesing
clear
echo "............script started............"
sleep 1
result=`python python/pythonScript1.py "hi"`
if [ "$result" == "Salaam" ]; then
    echo "script return correct response"
fi

Đã trả lời ngày 9 tháng 12 năm 2015 lúc 6:13Dec 9, 2015 at 6:13

6

Vượt qua các đối số dòng lệnh cho script shell sang python như thế này:

python script.py $1 $2 $3

In mã trả lại như thế này:

echo $?

Đã trả lời ngày 9 tháng 12 năm 2015 lúc 6:02Dec 9, 2015 at 6:02

Bạn cũng có thể sử dụng thoát [] mà không cần sys; Một điều ít hơn để nhập khẩu. Đây là một ví dụ:

$ python
>>> exit[1]
$ echo $?
1

$ python
>>> exit[0]
$ echo $?
0

Đã trả lời ngày 24 tháng 2 lúc 22:14Feb 24 at 22:14

SamuelsamuelSamuel

7.4358 Huy hiệu vàng44 Huy hiệu bạc40 Huy hiệu đồng8 gold badges44 silver badges40 bronze badges

Bạn có hai vấn đề ở đó. Đầu tiên, bạn đang sử dụng một shell không hỗ trợ mảng. Nhiều khả năng

#!/usr/bin/python
import sys

print "Starting python script!"
try:
    sys.exit['helloWorld1'] 
except:
     sys.exit['helloWorld2'] 
9 hoặc
import sys
if sys.argv[1]=='hi':
    print 'Salaam'
sys.exit[0]
0. Tôi đoán là mặc dù bạn có một dòng bash shebang ở đó, bạn đang gọi kịch bản của mình với
import sys
if sys.argv[1]=='hi':
    print 'Salaam'
sys.exit[0]
1, điều đó có nghĩa là nó đang được giải thích bởi bất cứ điều gì
#!/usr/bin/python
import sys

print "Starting python script!"
try:
    sys.exit['helloWorld1'] 
except:
     sys.exit['helloWorld2'] 
9 có trên hệ thống của bạn. Ví dụ: trên
import sys
if sys.argv[1]=='hi':
    print 'Salaam'
sys.exit[0]
0 [là mặc định
#!/usr/bin/python
import sys

print "Starting python script!"
try:
    sys.exit['helloWorld1'] 
except:
     sys.exit['helloWorld2'] 
9 trên Debian và Ubuntu], bạn nhận được:

$ out=$[echo 23.3 43.6 ]
$ echo ${out[0]}
dash: 2: Bad substitution

Tuy nhiên, trong bash, bạn sẽ nhận được:

$ out=$[echo 23.3 43.6 ]
$ echo ${out[0]}
23.3 43.6

Vấn đề tiếp theo là ngay cả khi bạn chạy điều này trong bash, đó không phải là cách các mảng hoạt động:

$ out=$[echo 23.3 43.6 ]
$ echo ${out[0]}
23.3 43.6
$ echo ${out[1]}   ## prints nothing but a newline since the variable is empty

$

Để có được một mảng trong bash, bạn cần đặt các yếu tố bên trong dấu ngoặc đơn:

#!/usr/bin/python
import sys

print "Starting python script!"
try:
    sys.exit['helloWorld1'] 
except:
     sys.exit['helloWorld2'] 
0

Trong

#!/usr/bin/python
import sys

print "Starting python script!"
try:
    sys.exit['helloWorld1'] 
except:
     sys.exit['helloWorld2'] 
9, thực tế là
import sys
if sys.argv[1]=='hi':
    print 'Salaam'
sys.exit[0]
0 trên Ubuntu, lệnh
import sys
if sys.argv[1]=='hi':
    print 'Salaam'
sys.exit[0]
7 được xây dựng chỉ có thể trả về các giá trị số - trạng thái thoát, có ý nghĩa trong bối cảnh của một hàm hoặc tập lệnh có nguồn gốc. Nguồn
import sys
if sys.argv[1]=='hi':
    print 'Salaam'
sys.exit[0]
8:

Cú pháp của lệnh trả về là

#!/usr/bin/python
import sys

print "Starting python script!"
try:
    sys.exit['helloWorld1'] 
except:
     sys.exit['helloWorld2'] 
1

Tất cả mọi thứ khác với tập lệnh shell của bạn trông chính xác. Tôi nghĩ rằng bạn cần sử dụng

import sys
if sys.argv[1]=='hi':
    print 'Salaam'
sys.exit[0]
9 thay vào đó trả lại và triệt tiêu các echo-es khác.

Trong trường hợp bạn cần trả thêm dữ liệu cho tập lệnh chính, bạn có thể xuất mọi thứ dưới dạng một dòng và chia các trường riêng biệt cho một số ký tự sẽ đóng vai trò của một dấu phân cách chính trong tập lệnh chính mà bạn có thể chuyển đổi chuỗi thành một mảng. Ví dụ: trong đó

#!/bin/bash
# script for tesing
clear
echo "............script started............"
sleep 1
result=`python python/pythonScript1.py "hi"`
if [ "$result" == "Salaam" ]; then
    echo "script return correct response"
fi
0 là dấu phân cách của chúng tôi và
#!/bin/bash
# script for tesing
clear
echo "............script started............"
sleep 1
result=`python python/pythonScript1.py "hi"`
if [ "$result" == "Salaam" ]; then
    echo "script return correct response"
fi
1 sẽ hỗ trợ ký tự dòng mới trong
#!/bin/bash
# script for tesing
clear
echo "............script started............"
sleep 1
result=`python python/pythonScript1.py "hi"`
if [ "$result" == "Salaam" ]; then
    echo "script return correct response"
fi
2]:

#!/usr/bin/python
import sys

print "Starting python script!"
try:
    sys.exit['helloWorld1'] 
except:
     sys.exit['helloWorld2'] 
2

Thông tin khác được cung cấp bởi tập lệnh và không được yêu cầu bởi tập lệnh chính có thể được chuyển hướng đến một số tệp nhật ký:

#!/usr/bin/python
import sys

print "Starting python script!"
try:
    sys.exit['helloWorld1'] 
except:
     sys.exit['helloWorld2'] 
3
#!/usr/bin/python
import sys

print "Starting python script!"
try:
    sys.exit['helloWorld1'] 
except:
     sys.exit['helloWorld2'] 
4

Thật không may, tôi không có nhiều kinh nghiệm với Python, nhưng đây là một tập lệnh .Py mẫu có thể xử lý đầu ra của tập lệnh .sh trên [tham khảo]:

#!/usr/bin/python
import sys

print "Starting python script!"
try:
    sys.exit['helloWorld1'] 
except:
     sys.exit['helloWorld2'] 
5
#!/usr/bin/python
import sys

print "Starting python script!"
try:
    sys.exit['helloWorld1'] 
except:
     sys.exit['helloWorld2'] 
6

Bài Viết Liên Quan

Chủ Đề