python *乘号在命令行中为什么报错,python乘号,环境Mac Os X 1
python *乘号在命令行中为什么报错,python乘号,环境Mac Os X 1
环境
Mac Os X 10.9
python 2.7
实现功能
命令行传入公式,输出结果
出错原因
‘*‘ 号把整个目录下的文件都当作参数传入了
问题
如何正确传入 * 号?
操作
输入公式 ’2 * 3‘:
python calc.py 2 * 3
print sys.argv 的结果
['calc.py', '2', 当前目录下所有文件名如't1_1.py', '3']
返回错误
Traceback (most recent call last): File "calc.py", line 54, in <module> main(sys.argv) File "calc.py", line 51, in main calc(argv) File "calc.py", line 16, in calc bNum = float(bNum)ValueError: could not convert string to float: backup_ver2.py
源码
#!/usr/bin/env python# -*- coding: utf-8 -*-import sysimport osdef calc(argv): aNum = argv[1] Opr = argv[2] bNum = argv[3] if '.' in aNum: aNum = float(aNum) else: aNum = int(aNum) if '.' in bNum: bNum = float(bNum) else: bNum = int(bNum) Opr = str(Opr) if Opr == '+': res = aNum + bNum elif Opr == '-': res = aNum - bNum elif Opr == '*': res = aNum * bNum elif Opr == '/': res = aNum / bNum elif Opr == '%': res = aNum % bNum elif Opr == '**' or Opr == '^': res = aNum ** bNum else: print "Operator error: '%s'" % Opr o2f(argv, res) print resdef showres(): filename = open('calc', 'r') fileread = filename.readlines() for eachLine in fileread: print eachLine, filename.close()def o2f(argv, res): filename = open('calc', 'a') filename.write(argv[1] + argv[2] + argv[3] + '=' + str(res) + os.linesep) filename.close()def main(argv): '''useage: print -- show all the result example: 1 + 1 -- to get the result''' if argv[1] == 'print': showres() else: calc(argv)if __name__ == '__main__': main(sys.argv)
执行
python calc.py 2 "*" 3
就可以了
想绕过转义的话就修改下程序以支持
python calc.py 2 x 3
这样的用法好了
这不是python的问题,而是shell的问题。
例如cat *这个命令---cat的行为很单纯,只是从参数表获取文件列表,之后显示每个文件而已,而根本不会执行“列文件列表”这个自己责任之外的动作。
是shell先识别到了*,认为*是shell的通配符,由shell把*替换成文件列表,从而cat程序收到的只是文件列表。
你可以试试用python的subprocess模块去调用你的calc程序,没有了shell的干扰,保管正确。
所以你需要查一下你的shell下,如何去转义*字符,废掉shell将*视为通配符的行为。
忘了markdown要转义*字符,掉坑了!!!-_-#
编橙之家文章,
相关内容
- beautifulsoup3.2.1使用时遇到的一些小问题,,参考了文档
- 谁能分享Python OpenStack高质量的部署资料,pythonopenstac
- 参照教程的Flask操作显示AttributeError是什么问题,,Flas
- 只有python2.6o可以在sx版本mod_wsgi中使用吗?,python2.6omo
- python语言中为什么说getter和setter用起来很傻,getterset
- 有比python comet框架功能更好的开源框架码,pythoncomet,想
- linux下多个python版本切换如何设置,linuxpython,比如自带
- django model实现,如何实现外键对多种模型,djangomodel,就是
- Python闪退问题,py2exe打包执行闪退了怎么调整,pythonpy
- python不同版本list内中文输出问题,python不同版本,foo
评论关闭