找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 5524|回复: 11

[求助] 通过cmd打开py文件,py文件中的sys.argv函数不能导入命令行...

1

主题

3

帖子

3

积分

贫民

积分
3
jianghsuiliu 发表于 2017-9-20 18:04:54 | 显示全部楼层 |阅读模式
Python新手小白,使用windows系统,Python3.6.2版本,想要学习sys.argv的功能。
写了如下代码:
import sys
a=sys.argv
print(a)
保存为"test.py",存在E盘
通过cmd用两种方式运行“test.py”
①c盘目录下,通过“Python+空格+文件完整路径+参数1+参数2+参数3”的方式打开,具体如图片方式一所显示,运行结果正常。
②换到“test.py”所在的路径盘,通过直接输入文件名字和参数的方式打开,即“test.py+参数1+参数2+参数3”,具体如图片方式二所显示,发现运行的结果中并没有输入的3个命令行参数。
请教各位大神,第二种方式打开test.py 文件有什么问题,之前不涉及外部参数的时候,文件都是可以正常运行的。谢谢各位大神了。

方式一

方式一

方式2

方式2
回复

使用道具 举报

1

主题

19

帖子

19

积分

贫民

积分
19
yeshi208 发表于 2017-9-20 19:57:17 | 显示全部楼层
为什么我的跟你的不一样

D:\>python "D:\百度云同步\共享文件夹\python\source code\test.py" aa bb cc
3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 17:54:52) [MSC v.1900 32 bit (Intel)]
['D:\\百度云同步\\共享文件夹\\python\\source code\\test.py', 'aa', 'bb', 'cc']

D:\百度云同步\共享文件夹\python\source code>python test.py aa bb cc
3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 17:54:52) [MSC v.1900 32 bit (Intel)]
['test.py', 'aa', 'bb', 'cc']
回复 支持 反对

使用道具 举报

1

主题

19

帖子

19

积分

贫民

积分
19
yeshi208 发表于 2017-9-20 19:59:17 | 显示全部楼层
我直接执行脚本的时候用的是Python2.7, 但是也是可以打出来的。而且test的全路径也打出来的。

D:\百度云同步\共享文件夹\python\source code>test.py aa bb cc
2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:53:40) [MSC v.1500 64 bit (AMD64)]

['D:\\\xb0\xd9\xb6\xc8\xd4\xc6\xcd\xac\xb2\xbd\\\xb9\xb2\xcf\xed\xce\xc4\xbc\xfe
\xbc\xd0\\python\\source code\\test.py', 'aa', 'bb', 'cc']
回复 支持 反对

使用道具 举报

1

主题

19

帖子

19

积分

贫民

积分
19
yeshi208 发表于 2017-9-20 20:09:45 | 显示全部楼层
我把python2.7删掉了,执行就和你的一样。
但是只要是用python执行,就有参数,不用python执行,就没有参数,不管是什么目录。

D:\百度云同步\共享文件夹\python\source code>python test.py aa bb cc
3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 17:54:52) [MSC v.1900 32 bit (Intel)]
['test.py', 'aa', 'bb', 'cc']

D:\百度云同步\共享文件夹\python>python "source code\test.py" aa bb cc
3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 17:54:52) [MSC v.1900 32 bit (Intel)]
['source code\\test.py', 'aa', 'bb', 'cc']
回复 支持 反对

使用道具 举报

1

主题

19

帖子

19

积分

贫民

积分
19
yeshi208 发表于 2017-9-20 20:15:02 | 显示全部楼层
我猜是前面不通过添加python的时候,等于让windows命令行去查找命令,那么test.py aa bb cc就相当于三个命令,第一个windows找到了匹配的应用,作为参数传给python,那么就相当于:python test.py,后面aa, bb, cc windows没有找到相应的命令。

而当以python test.py aa bb cc执行的时候,test.py aa bb cc作为参数传给python解释器,python解释器把他们翻译成argv。

不知对否。
回复 支持 反对

使用道具 举报

1

主题

3

帖子

3

积分

贫民

积分
3
jianghsuiliu  楼主| 发表于 2017-9-21 11:43:32 | 显示全部楼层
yeshi208 发表于 2017-9-20 20:15
我猜是前面不通过添加python的时候,等于让windows命令行去查找命令,那么test.py aa bb cc就相当于三个命 ...

非常感谢您的热情帮助以及尽心的回答,我觉得您说的蛮有道理的。但我有一点有点混乱,就是如果真是“当以python test.py aa bb cc执行的时候,test.py aa bb cc作为参数传给python解释器,python解释器把他们翻译成argv。”那么命令行第一个参数就是test.py,即是说sys.argv(0)返回的是test.py 本生的路径,sys.argv(1)返回的是命令行第一个参数,也应该是test.py。

其实我之所以会遇到这个问题,是因为有一本教材上写着可以用win+r的方式打开py文件,并且后面可以跟参数,但是我一直没成功,然后就各种尝试,发现了有这么个问题。不知道您能否帮我解决这个问题。

我试图用win+r的方式打开的Python文件代码如下:
#!python3
#pw.py - An insecure password locker program.

PASSWORDS={'email':'F7minlBDDuvMJuxESSKHFhTxFtjVB6',
           'blog':'VmALvQyKAxiVH5G8v01if1MLZF3sdt',
           'luggage':'12345'}

import sys,pyperclip
if len(sys.argv)<2:
    print('Usage:python pw.py[accout]-copy accout password')
    sys.exit()

account=sys.argv[1]

if account in PASSWORDS:
    pyperclip.copy(PASSWORDS[account])
    print('Password for '+account+'copied to clipboard.')
else:
    print('There is no account named '+ account)
回复 支持 反对

使用道具 举报

1

主题

19

帖子

19

积分

贫民

积分
19
yeshi208 发表于 2017-9-21 13:51:07 | 显示全部楼层
说实话,我也没弄清windows文件关联后,执行python文件的原理。也许要等高人解答。

python test.py aa bb cc执行的时候,由python解释器来处理后面的参数:第一个作为argv[0],后面三个作为argv[1:]。

test.py aa bb cc执行的时候,由windows的系统来处理后面的参数,具体行为未知,所以你看的那书上说的例子,要么是书本错了,要么是有些特殊配置。


我也试着从linux下运行了,两种方式都是可以的。
不过linux下,在文件头添加了 #!/var/bin/python

[root@24F]# ./test.py aa bb cc
2.7.12 (default, Feb 14 2017, 21:51:33)
['./test.py', 'aa', 'bb', 'cc']
[root@24F]# python test.py aa bb cc
2.7.12 (default, Feb 14 2017, 21:51:33)
['test.py', 'aa', 'bb', 'cc']
回复 支持 反对

使用道具 举报

1419

主题

1891

帖子

291

积分

侠客

积分
291

最佳新人热心会员默默耕耘

whydo1 发表于 2017-9-21 19:45:11 | 显示全部楼层
如何在window系统中让py文件可以直接执行
http://blog.csdn.net/melody_1314/article/details/7693305
python3.4.4, win10
回复 支持 反对

使用道具 举报

1

主题

19

帖子

19

积分

贫民

积分
19
yeshi208 发表于 2017-9-21 19:55:36 | 显示全部楼层
有道理,不过Win7下面没找到设置的地方。
回复 支持 反对

使用道具 举报

1

主题

3

帖子

3

积分

贫民

积分
3
jianghsuiliu  楼主| 发表于 2017-9-22 09:21:58 | 显示全部楼层
yeshi208 发表于 2017-9-21 13:51
说实话,我也没弄清windows文件关联后,执行python文件的原理。也许要等高人解答。

python test.py aa bb  ...

谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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