解决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!

更多相关文章

  1. eclipse中写python文件找不到
  2. Python 文件的基本操作
  3. 利用Dnspod api批量更新添加DNS解析【python脚本】
  4. 是否可以在没有安装铁python的PC上运行编译的铁python脚本?
  5. python脚本下载并解码MNIST数据遇到的问题
  6. 在Python中的大文件中拆分行的内存问题
  7. RobotFramework中加载自定义python包中的library(一个py文件中有
  8. Python文件遍历的三种方法
  9. python 的基础学习 第九天 文件的操作

随机推荐

  1. 深入typeclass_Haskell笔记4
  2. 【Java】留下没有基础眼泪的面试题
  3. 类型_Haskell笔记3
  4. 使用 IntelliJ 调试 Java Streams
  5. 六一儿童节,送你一个F字符串
  6. 每周 10 道 Java 面试题:集合类
  7. 学习linux的第5天
  8. 如何使用maven 轻松重构项目
  9. iPhone要降价?巨头战争很激烈
  10. 【Java】几道让你拿offer的面试题