解决Linux下运行Python脚本显示“: 没有那个文件或目录”的问题
解决Linux下运行Python脚本显示“:没有那个文件或目录”的问题
我猜不少人都遇到过类似的问题:
在Windows下写好了一个python脚本,运行没问题
但放到Linux系统下就必须在命令行前加上一个python解释器才能运行
脚本开头的注释行已经指明了解释器的路径,也用chmod给了执行权限,但就是不能直接运行脚本。
比如这个脚本:
#!/usr/bin/envpython
#-*-coding=utf-8-*-
defmain():
print('Thisisjustatest!\r\n')
if__name__=='__main__':
main()
按理说没错的,但为什么不能直接运行呢?
后来发现问题出在换行表示上……
Windows下,文本的换行是\r\n一同实现的,而*nix下则只用\n
所以我的第一行代码在Linux下就被识别为了:
#!/usr/bin/envpython\r
很显然,系统不知道这个"python\r"是个什么东西……
知道了这个,解决方案就很显而易见了,写了一个自动替换换行标志的脚本:
#!/usr/bin/envpython
#-*-coding=utf-8-*-
importsys,os
defreplace_linesep(file_name):
iftype(file_name)!=str:
raiseValueError
new_lines=[]
#以读模式打开文件
try:
fobj_original=open(file_name,'r')
exceptIOError:
print('Cannotreadfile%s!'%file_name)
returnFalse
#逐行读取原始脚本
print('Readingfile%s'%file_name)
line=fobj_original.readline()
whileline:
ifline[-2:]=='\r\n':
new_lines.append(line[:-2]+'\n')
else:
new_lines.append(line)
line=fobj_original.readline()
fobj_original.close()
#以写模式打开文件
try:
fobj_new=open(file_name,'w')
exceptIOError:
print('Cannotwritefile%s!'%file_name)
returnFalse
#逐行写入新脚本
print('Writingfile%s'%file_name)
fornew_lineinnew_lines:
fobj_new.write(new_line)
fobj_new.close()
returnTrue
defmain():
args=sys.argv
iflen(args)<2:
print('Pleaseenterthefilenamesasparametersfollowthisscript.')
os._exit(0)
else:
file_names=args[1:]
forfile_nameinfile_names:
ifreplace_linesep(file_name):
print('Replacefor%ssuccessfully!'%file_name)
else:
print('Replacefor%sfailed!'%file_name)
os._exit(1)
if__name__=='__main__':
main()
运行以上脚本对文本的换行符进行替换后,原来不能直接运行的脚本现在可以直接运行了:
arthus@arthus-desktop:~/桌面$./test.pyPythonTest.py
ReadingfilePythonTest.py
WritingfilePythonTest.py
ReplaceforPythonTest.pysuccessfully!
arthus@arthus-desktop:~/桌面$./PythonTest.py
Thisisjustatest!
更多相关文章
- eclipse中写python文件找不到
- Python 文件的基本操作
- 利用Dnspod api批量更新添加DNS解析【python脚本】
- 是否可以在没有安装铁python的PC上运行编译的铁python脚本?
- python脚本下载并解码MNIST数据遇到的问题
- 在Python中的大文件中拆分行的内存问题
- RobotFramework中加载自定义python包中的library(一个py文件中有
- Python文件遍历的三种方法
- python 的基础学习 第九天 文件的操作