1005663861 发表于 2021-10-30 11:57:55

如何提供文件名作为命令行参数

import sys

NUM_LINES = 10

if len(sys.argv) != 2:
    print('Provide the file name as a command line argument.')
    quit()

try:
    inf = open(sys.argv, "r")
    line = inf.readline()
    count = 0
    while count < NUM_LINES and line != '':
      line = line.rstrip()
      count += 1
      print(line)
      line = inf.readline()
    inf.close()
except IOError:
    print('An error occurred while accessing the file.')
   

程序代码如上,总是运行第六行,想知道怎么样将命令行参数添加到py文件里,是在同一个文件夹下创建一个文本文档还是设置路径?

kogawananari 发表于 2021-10-30 12:11:14

本帖最后由 kogawananari 于 2021-10-30 12:12 编辑

import sys
from pathlib import Path

print('当前目录是',Path.cwd())

NUM_LINES = 10

if len(sys.argv) != 2:
    print('格式 python文件+空格+文件名')
    quit()

try:
    inf = open(Path.cwd()/Path(sys.argv), "r")
    line = inf.readline()
    count = 0
    while count < NUM_LINES and line != '':
      line = line.rstrip()
      count += 1
      print(line)
      line = inf.readline()
    inf.close()
except IOError:
    print('文件名或路径不对 可以尝试cd到要读取的目标文件所在目录')

jackz007 发表于 2021-10-30 12:21:23

import sys

NUM_LINES = 10

if len(sys . argv) < 2 :
    print('Provide the file name as a command line argument.')
else:
    try:
      inf = open(sys . argv , 'rt')
      txt = list(inf)
      inf . close()
      m = NUM_LINES if len(txt) > NUM_LINES else len(txt)
      for i in range(m):
            print(txt . rstrip())
    except IOError:
      print('An error occurred while accessing the file.')
      运行实况:
D:\00.Excise\Python>python x.py data.txt
从明天起,做一个幸福的人
喂马、劈柴,周游世界
从明天起,关心粮食和蔬菜
我有一所房子,面朝大海,春暖花开

D:\00.Excise\Python>python x.py xy.txt
An error occurred while accessing the file.

D:\00.Excise\Python>

hrpzcf 发表于 2021-10-30 12:24:32

你运行的方式不对,既然你要从命令行提供路径给py文件,那就要从命令行运行它:

在你的源代码目录打开cmd,输入
python 你的源代码.py 你需要处理的文件的文件路径
比如python test.py f:/1/t.txt

1005663861 发表于 2021-10-30 13:38:15

jackz007 发表于 2021-10-30 12:21
运行实况:

我不知道sys.argv所判断的文件储存在哪里

1005663861 发表于 2021-10-30 13:38:45

hrpzcf 发表于 2021-10-30 12:24
你运行的方式不对,既然你要从命令行提供路径给py文件,那就要从命令行运行它:

在你的源代码目录打开cmd ...

可以在代码里边标注文件的位置吗

hrpzcf 发表于 2021-10-30 13:57:41

1005663861 发表于 2021-10-30 13:38
可以在代码里边标注文件的位置吗

你可能还没明白命令行参数是什么意思
比如你在命令行中这样运行你的源代码:
python test.py 123 abc aks23 666
那你的源代码中sys.argv的值就是[‘test.py’, '123', 'abc', 'aks23', '666']

又比如你在命令行这样运行你的源代码
python test.py f:/1.txt
你的源代码中sys.argv的值就是[‘test.py’, 'f:/1.txt']
里面的
inf = open(sys.argv, "r")就相当于inf = open('f:/1.txt', "r")

1005663861 发表于 2021-10-30 14:02:04

jackz007 发表于 2021-10-30 12:21
运行实况:

就是我想知道从什么地方可以传入系统命令参数,而这个参数可以是文本文档吗

jackz007 发表于 2021-10-30 14:07:53

本帖最后由 jackz007 于 2021-10-30 14:11 编辑

1005663861 发表于 2021-10-30 14:02
就是我想知道从什么地方可以传入系统命令参数,而这个参数可以是文本文档吗

      系统命令参数只的是你在启动脚本时,向操作系统提交的命令行,比如:
python x.py abc.txt
      那么,len(sys . argv) == 2,sys . argv == 'x.py',sys . argv == 'abc.txt' 这就是命令行的含义。
      你可以用下面的语句把 sys . argv 直接打印出来:
print(sys . argv)

1005663861 发表于 2021-10-30 14:09:58

jackz007 发表于 2021-10-30 14:07
系统命令参数只的是你在启动脚本时,向操作系统提交的命令行,比如:

      那么,sys . ar ...

我知道sys.argv的用法,就比如说这个abc.txt, 它是怎么添加到python x.py的扩展名后边,如何添加

1005663861 发表于 2021-10-30 14:12:52

jackz007 发表于 2021-10-30 14:07
系统命令参数只的是你在启动脚本时,向操作系统提交的命令行,比如:

      那么,len(sy ...

现在含义我清楚,每次运行的时候len(sys.argv) == 1,的,就是我不知道将txt文件放在什么地方,会使len(sys.argv) == 2

jackz007 发表于 2021-10-30 14:13:07

1005663861 发表于 2021-10-30 14:09
我知道sys.argv的用法,就比如说这个abc.txt, 它是怎么添加到python x.py的扩展名后边,如何添加

          在 CMD 窗口里,通过键盘输入

hrpzcf 发表于 2021-10-30 14:15:33

1005663861 发表于 2021-10-30 14:09
我知道sys.argv的用法,就比如说这个abc.txt, 它是怎么添加到python x.py的扩展名后边,如何添加

在你的源代码目录打开cmd,输入


1005663861 发表于 2021-10-30 14:15:39

jackz007 发表于 2021-10-30 14:13
在 CMD 窗口里,通过键盘输入

图片/无标题.png

1005663861 发表于 2021-10-30 14:16:54

jackz007 发表于 2021-10-30 14:13
在 CMD 窗口里,通过键盘输入

F:\e\python_file\python_exercise>Python p7_149.py p7_149.txt
Traceback (most recent call last):
File "p7_149.py", line 11, in <module>
    line = inf.readline()
UnicodeDecodeError: 'gbk' codec can't decode byte 0xab in position 20: illegal multibyte sequence

是语法格式不对吗

hrpzcf 发表于 2021-10-30 14:20:35

1005663861 发表于 2021-10-30 14:16
F:\e\python_file\python_exercise>Python p7_149.py p7_149.txt
Traceback (most recent call last): ...

inf = open(sys.argv, "r")改成inf = open(sys.argv, "r", encoding="utf-8")

1005663861 发表于 2021-10-30 14:26:36

hrpzcf 发表于 2021-10-30 13:57
你可能还没明白命令行参数是什么意思
比如你在命令行中这样运行你的源代码:



F:\e\python_file\python_exercise>Python p7_149.py p7_149.txt
Traceback (most recent call last):
File "p7_149.py", line 11, in <module>
    line = inf.readline()
UnicodeDecodeError: 'gbk' codec can't decode byte 0xab in position 20: illegal multibyte sequence

我运行了,是这种情况

hrpzcf 发表于 2021-10-30 14:28:29

1005663861 发表于 2021-10-30 14:26
F:\e\python_file\python_exercise>Python p7_149.py p7_149.txt
Traceback (most recent call last):
...

看16楼

1005663861 发表于 2021-10-30 14:30:30

hrpzcf 发表于 2021-10-30 14:28
看16楼

出问题的使cmd不是python

hrpzcf 发表于 2021-10-30 14:46:19

1005663861 发表于 2021-10-30 14:30
出问题的使cmd不是python

你按照16楼改了源代码再试试不就知道了
页: [1] 2
查看完整版本: 如何提供文件名作为命令行参数