鱼C论坛

 找回密码
 立即注册
查看: 2213|回复: 22

[已解决]如何提供文件名作为命令行参数

[复制链接]
发表于 2021-10-30 11:57:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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[1], "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文件里,是在同一个文件夹下创建一个文本文档还是设置路径?
最佳答案
2021-10-30 15:09:21
1005663861 发表于 2021-10-30 14:55
只能在cmd运行这个程序吗,不能用pycharm进行运行吗


只有从命令行运行(包括创建新进程的方式),才能给你的程序提供命令行参数。
pycharm里有终端,跟cmd是一样效果。

如果你想在pycharm中点击按钮或者右键直接运行,那你的程序完全可以在运行时再用input要求用户输入路径,或者直接把路径写到源代码里,也不是非得接收命令行参数,对不对?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[1]), "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到要读取的目标文件所在目录')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[1] , 'rt')
        txt = list(inf)
        inf . close()
        m = NUM_LINES if len(txt) > NUM_LINES else len(txt)
        for i in range(m):
            print(txt[i] . 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>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

在你的源代码目录打开cmd,输入
python 你的源代码.py 你需要处理的文件的文件路径
比如
python test.py f:/1/t.txt
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-30 13:38:15 | 显示全部楼层

我不知道sys.argv所判断的文件储存在哪里
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-30 13:38:45 | 显示全部楼层
hrpzcf 发表于 2021-10-30 12:24
你运行的方式不对,既然你要从命令行提供路径给py文件,那就要从命令行运行它:

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

可以在代码里边标注文件的位置吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[1], "r")
就相当于
inf = open('f:/1.txt', "r")

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-30 14:02:04 | 显示全部楼层

就是我想知道从什么地方可以传入系统命令参数,而这个参数可以是文本文档吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[0] == 'x.py',sys . argv[1] == 'abc.txt' 这就是命令行的含义。
        你可以用下面的语句把 sys . argv 直接打印出来:
print(sys . argv)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-30 14:09:58 | 显示全部楼层
jackz007 发表于 2021-10-30 14:07
系统命令参数只的是你在启动脚本时,向操作系统提交的命令行,比如:

        那么,sys . ar ...

我知道sys.argv的用法,就比如说这个abc.txt, 它是怎么添加到python x.py的扩展名后边,如何添加
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-30 14:12:52 | 显示全部楼层
jackz007 发表于 2021-10-30 14:07
系统命令参数只的是你在启动脚本时,向操作系统提交的命令行,比如:

        那么,len(sy ...

现在含义我清楚,每次运行的时候len(sys.argv) == 1,的,就是我不知道将txt文件放在什么地方,会使len(sys.argv) == 2
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

          在 CMD 窗口里,通过键盘输入
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-30 14:15:33 | 显示全部楼层
1005663861 发表于 2021-10-30 14:09
我知道sys.argv的用法,就比如说这个abc.txt, 它是怎么添加到python x.py的扩展名后边,如何添加
在你的源代码目录打开cmd,输入



屏幕截图 2021-10-30 141450.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-30 14:15:39 | 显示全部楼层
jackz007 发表于 2021-10-30 14:13
在 CMD 窗口里,通过键盘输入


                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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

是语法格式不对吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[1], "r")改成inf = open(sys.argv[1], "r", encoding="utf-8")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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

我运行了,是这种情况
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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楼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-30 14:30:30 | 显示全部楼层

出问题的使cmd不是python
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-30 14:46:19 | 显示全部楼层
1005663861 发表于 2021-10-30 14:30
出问题的使cmd不是python

你按照16楼改了源代码再试试不就知道了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 22:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表