Python脚本赢得';在主机之外写入时,无法执行

Python脚本赢得';在主机之外写入时,无法执行,python,linux,ubuntu,Python,Linux,Ubuntu,我的最终问题有两个: 每当我试图通过/foo.py方法执行python脚本时,我都会得到一个:没有这样的文件或目录。但是,我可以执行python foo.py 当我无法使用/foo.py执行python脚本时,我无法使用Apache2/CGI访问它(请注意,如果我在RaspberryPi本身中编写并保存脚本,我可以让它工作,即,当我将它保存到/usr/lib/CGI-bin/时,我可以从web浏览器访问它)(在本例中,我更改foo.py以打印适当的html标题) 在所有情况下,foo.py都是可

我的最终问题有两个:

  • 每当我试图通过
    /foo.py
    方法执行python脚本时,我都会得到一个
    :没有这样的文件或目录。但是,我可以执行
    python foo.py
  • 当我无法使用
    /foo.py
    执行python脚本时,我无法使用Apache2/CGI访问它(请注意,如果我在RaspberryPi本身中编写并保存脚本,我可以让它工作,即,当我将它保存到/usr/lib/CGI-bin/时,我可以从web浏览器访问它)(在本例中,我更改foo.py以打印适当的html标题)
  • 在所有情况下,foo.py都是可执行的,用户所有者是root

    foo.py=

    #!/usr/bin/env python
    
    print("foo")
    
    工作原理:

  • 我在RaspberryPi(和Ubuntu)中打开一个文本编辑器并创建foo.py(注意,我使用RaspberryPi的Debian和Seroperate Ubunutu 14.04进行交叉引用/故障排除)
  • 在使foo.py可执行后,我可以使用./foo.py执行foo.py
  • 什么不起作用(第1部分):

  • 我在Windows8.1上编写相同的脚本,并将其保存到文档文件夹中
  • 我将脚本保存到共享网络驱动器/
    home/pi
    (我使用Samba.smd.config,如下所示)
  • 在RaspberryPi(或Ubuntu)上,我使脚本可执行
  • 每当我尝试通过
    /foo.py
    方法执行python脚本时,我都会得到一个
    :没有这样的文件或目录
    。但是,我可以执行
    python foo.py
  • 什么不起作用(第2部分):

  • 我在Windows8.1上编写相同的脚本,并将其保存到文档文件夹中
  • 我打开FileZilla和sftp,RaspberryPi(和Ubuntu)的脚本目标是
    /home/pi
  • 每当我尝试通过
    /foo.py
    方法执行python脚本时,我都会得到一个
    :没有这样的文件或目录
    。但是,我可以执行
    python foo.py
  • 什么不起作用(第3部分):

  • 我在Windows8.1上编写相同的脚本,并将其保存到文档文件夹中
  • 我编写了一个批处理文件,将脚本(pscp.exe)复制到目标
    /home/pi
    ,并使其可执行(我在pi端再次检查)
  • 每当我尝试通过
    /foo.py
    方法执行python脚本时,我都会得到一个
    :没有这样的文件或目录
    。但是,我可以执行
    python foo.py
  • 总之,当我在主机内工作时,所有脚本都会愉快地执行。但是当我想从Windows8.1开始工作并通过我所述的3种方法发送时,脚本会生气,并且不会使用
    /

    Samba配置(smdb.Config)


    可能是行尾问题。当您在“另一台计算机”(可能是在Windows上)上创建脚本时,脚本会得到Windows行尾(“\r\n”)。当您尝试在Linux主机上执行它们时,系统无法找到第一行中提到的解释器“/usr/bin/python\r”(很明显)

    我建议您通过运行类似于
    perl-pi-e's\r\n\n'script.py的东西来过滤掉所有Windows EOL,多亏了PM 2Ring


    问题确实在于Windows添加的“不可见”行结尾。解决方案是从[sourceforge]下载(免费)dos2unix/unix2dos文本文件格式转换器.我在命令提示符下执行了
    \dos2unix.exe foo.py
    ,而您的Linux系统应该有名为
    dos2unix
    &
    unix2dos
    的命令,可以在DOS和Unix格式之间转换文本文件的行尾;两个程序都可以在任意方向转换(可能是指向同一可执行文件的simlinks)。这很有效。谢谢。我为我的问题添加了一个正式答案。不用担心,JC Lee。我刚才提到了这些程序,因为它们通常安装在Linux系统中,假设它们比user3159253的perl脚本稍微方便。FWIW,使用sed、awk或Python执行与perl脚本相同的操作非常简单。请标记一个的答案已被接受,因此这不再是未解决的问题。谢谢。我必须等待2天才能选择我自己的答案。
    [homes]
       comment = Home Directories
       browseable = yes
       create mask = 0777
       directory mask = 0777
       valid users = %S
    
    [SnoopPi]
       comment= Pi Home
       path = /home/pi
       browseable=yes
       writeable=Yes
       only guest=no
       create mask=0777
       directory mask=0777
       public=no
       read only=no
       force user=root