Tôi có một kịch bản shell có lệnh để chạy tập lệnh Python. Tôi muốn 4 biến [cho ví dụ: var1, var2, var3, var4] từ tập lệnh shell được sử dụng trong tập lệnh Python. Bất kỳ đề xuất làm thế nào để làm điều này?
Ví dụ: Tôi muốn thay thế "lastTest44"
, firstTest44
và A-S00000582
bằng các biến từ tập lệnh shell.
driver.find_element_by_id["findKey_input"].clear[]
driver.find_element_by_id["findKey_input"].send_keys["lastTest44"]
driver.find_element_by_id["ST_View_lastTest44, firstTest44"].click[]
driver.find_element_by_link_text["A-S00000582"].click[]
Savanto
4.43022 Huy hiệu bạc40 Huy hiệu đồng22 silver badges40 bronze badges
Đã hỏi ngày 5 tháng 6 năm 2014 lúc 1:22Jun 5, 2014 at 1:22
3
Chỉ cần sử dụng các đối số dòng lệnh:
Kịch bản Shell
a=1
b=2
python test1.py "$a" "$b"
Kịch bản Python
import sys
var1 = sys.argv[1]
var2 = sys.argv[2]
print var1, var2
Đã trả lời ngày 5 tháng 6 năm 2014 lúc 1:33Jun 5, 2014 at 1:33
Oogaogaooga
15.3k2 Huy hiệu vàng19 Huy hiệu bạc21 Huy hiệu đồng2 gold badges19 silver badges21 bronze badges
1
Những gì bạn đang tìm kiếm để sử dụng được gọi là đối số dòng lệnh. Đây là các tham số được chỉ định tại thời điểm gọi đoạn mã cụ thể mà bạn đang muốn chạy.
Trong Python, chúng có thể truy cập thông qua mô -đun
a=1
b=2
python test1.py "$a" "$b"
0 theo một biến gọi là a=1
b=2
python test1.py "$a" "$b"
1. Đây là một mảng của tất cả các đối số được truyền từ người gọi, trong đó mỗi giá trị trong mảng là một chuỗi.Ví dụ: giả sử mã tôi đang viết có các tham số để vẽ một hình vuông. Điều này có thể yêu cầu 4 tham số - tọa độ x, tọa độ y, chiều rộng và chiều cao. Mã Python cho điều này có thể trông như thế này:
import sys
x = sys.argv[1]
y = sys.argv[2]
width = sys.argv[3]
height = sys.argv[4]
# Some more code follows.
Một vài điều cần lưu ý:
- Mỗi đối số là loại
2. Điều này có nghĩa là trong trường hợp này, tôi không thể thực hiện bất kỳ loại số học nào cho đến khi chuyển đổi chúng thành các loại chính xác mà tôi muốn.a=1 b=2 python test1.py "$a" "$b"
- Đối số đầu tiên trong
3 là tên của tập lệnh đang được chạy. Bạn sẽ muốn đảm bảo rằng bạn bắt đầu đọc từ vị trí thứ hai trong mảnga=1 b=2 python test1.py "$a" "$b"
4 thay vì chỉ số 0 điển hình như bạn thường làm.a=1 b=2 python test1.py "$a" "$b"
Có một số thông tin chi tiết hơn ở đây, có thể dẫn bạn đến cách xử lý các đối số dòng lệnh tốt hơn. Để bắt đầu mặc dù, điều này sẽ hoạt động đủ tốt.
Đã trả lời ngày 5 tháng 6 năm 2014 lúc 1:37Jun 5, 2014 at 1:37
Pseudoramblepseudoramblepseudoramble
2.49123 Huy hiệu bạc28 Huy hiệu đồng23 silver badges28 bronze badges
Tôi nghĩ rằng điều này sẽ làm những gì bạn muốn:
2014-06-05 09:37:57 [tmp]$ export VAR1="a"
2014-06-05 09:38:01 [tmp]$ export VAR2="b"
2014-06-05 09:38:05 [tmp]$ export VAR3="c"
2014-06-05 09:38:08 [tmp]$ export VAR4="d"
2014-06-05 09:38:12 [tmp]$ python
Python 2.7.3 [default, Feb 27 2014, 19:58:35]
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from os import environ
>>> environ['VAR1']
'a'
>>> environ['VAR2']
'b'
>>> environ['VAR3']
'c'
>>> environ['VAR4']
'd'
>>> environ['VAR5']
Traceback [most recent call last]:
File "", line 1, in
File "/usr/lib/python2.7/UserDict.py", line 23, in __getitem__
raise KeyError[key]
KeyError: 'VAR5'
Hãy nhớ bắt KeyError và trả lời phù hợp hoặc sử dụng phương thức GET [từ lớp Dict] và chỉ định mặc định sẽ được sử dụng khi không có khóa:
>>> environ.get['VAR5', 'not present']
'not present'
Thêm: //docs.python.org/2/l Library/os.html
Đã trả lời ngày 5 tháng 6 năm 2014 lúc 1:46Jun 5, 2014 at 1:46
1
Tôi muốn thêm những gì đã làm việc cho trường hợp của tôi:
Tôi có các biến của mình trong tập tin được lấy trong script shell. Cần chuyển các biến cho Python từ cùng một tệp. Tôi cũng có gấu trúc và tia lửa trong trường hợp của tôi, kết quả dự kiến của tôi là kết hợp con đường đi qua trong "tocsv" mà đạt được
**Shell**:
. path/to/variable/source file # sourcing the variables
python path/to/file/extract.py "$OUTBOUND_PATH"
**Python**:
import sys
import pandas as pd
#If spark session is involved import the sparksession as well
outbound_path=sys.argv[1] #argument is collected from the file passed through shell
file_name="/report.csv"
geo.topandas[].tocsv[outbound_path+file_name,mode="w+"]
Đã trả lời ngày 8 tháng 10 năm 2020 lúc 23:04Oct 8, 2020 at 23:04
BhavibhaviBhavi
492 huy hiệu đồng2 bronze badges