Truyền đối số dòng lệnh cho Python [đã đóng]


-1

Tôi đang cố gắng viết một đối số dòng lệnh sẽ lấy một tên tệp, sau đó sẽ cố gắng mở tệp và đọc nội dung của tệp trong dòng lệnh Linux, nếu không có đối số nào được thông qua thì nó sẽ chỉ mở tập tin được xác định trước trong Bộ luật. Hiện tại khi tôi đi chạy python file.py / home / Desktop / TestFile

tôi đang nhận được lỗi: đối số không được công nhận:

def openfile():
    first = sys.argv
    for arg in sys.argv:
        FILENAME = first
        if len(arg) != 1:
            with open(filename) as f:
        else:
            with open(FILENAME) as f: 

Câu trả lời:


0

Tôi phải nói rằng mã của bạn làm tôi gãi đầu một chút.

Đây là cách tôi sẽ làm điều đó:

#!/usr/bin/env python3
import sys

def myOpen(aList):
    fileName = "myFile"

    if len(aList) > 1:
        fileName = aList[1]

    try:
        with open(fileName) as f:
            for line in f:
                print(line, end="")
    except IOError:
        print("Can't open file " + fileName + ".")

myOpen(sys.argv)

Bây giờ, nếu tôi thực thi tập lệnh này, tôi nhận được kết quả này khi tôi KHÔNG truyền đối số, do đó sử dụng fileName( myFile) có trong hàm:

./args.py
foo
bar
baz

Hãy kiểm tra lại tập tin myFile.

cat myFile 
foo
bar
baz

Đây là những gì xảy ra khi tôi chỉ định một tệp không có thật:

./args.py foo
Can't open file foo.

Và cuối cùng, khi tôi chỉ định một tệp chính xác làm đối số:

./args.py vmstat.txt 
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 2419392  76200 642712    0    0    25    10   20   62  0  0 99  1  0

Vấn đề chính với mã của bạn là:

FILENAME = first

Các firstbiến có chứa toàn bộ danh sách đó là sys.argv, bạn không thể mở một tập tin với một yếu tố danh sách như là đối số để (open). Kiểm tra này:

#!/usr/bin/env python3

import sys

first = sys.argv
FILENAME = first

with open(FILENAME) as f:
    for line in f:
        print(f)

Bây giờ khi tôi thực thi, tôi nhận được điều này:

./faultyArgs.py myFile
Traceback (most recent call last):
  File "./faultyArgs.py", line 8, in <module>
    with open(FILENAME) as f:
TypeError: invalid file: ['./faultyArgs.py', 'myFile']

Ngoài ra, có vẻ như bạn không bao giờ đặt biến filename.


Cảm ơn, chỉ cần một câu hỏi nhanh là có thể sử dụng sys, argv kết hợp với agprase?
David

Có lẽ sẽ tốt hơn nếu bạn hỏi câu hỏi đó tại StackOverflow. Trân trọng.
malawlawns

0
#!/usr/bin/env python
import sys

def openfile(fn):
    file = open(fn, "r")
    out = file.read()
    print out
    file.close()

openfile(sys.argv[1])

Hãy thử điều đó, điều này sẽ hoạt động, ít nhất là để đọc tệp ra thiết bị đầu cuối


Điều này sẽ chỉ làm việc nếu có một giá trị trong sys.argv[1], nếu không nó sẽ thất bại.
malawlawns 4/11/2016
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.