为什么我的Python脚本编写Windows样式回车?

时间:2014-06-02 19:49:44

标签: python linux ssh fabric

我正在尝试编写一个脚本来创建一个fabfile,保存它然后再运行它。到目前为止,这是我的代码:

#!/usr/bin/python

bakery_internalip = "10.10.15.203"

print "[....] Preparing commands to run within fabfile.py"

fabfile = open("sfab.py", "w")
fabfile.write("from fabric.api import run, sudo, task\n\n@task\ndef myinstall():\n\tsudo('yum install httpd')")
fabfile.close

print "Running Fab Commands"

import subprocess
subprocess.call(['fab', '-f', 'sfab.py', '-u ec2-user', '-i', 'id_rsa', '-H', bakery_internalip, 'myinstall'])

我的fabfile的内容如下:

[root@ip-10-10-20-82 bakery]# cat sfab.py
from fabric.api import run, sudo, task

@task
def myinstall():
        sudo('yum install httpd')

我的脚本在运行时出现以下错误:

Fatal error: Fabfile didn't contain any commands!

但是,如果我在文件上运行dos2unix然后运行以下命令,它可以正常工作:

 fab -f sfab.py -H localhost myinstall

2 个答案:

答案 0 :(得分:2)

简单错字fabfile.close should be fabfile.close()

没有关闭就会给你:

Running Fab Commands

Fatal error: Fabfile didn't contain any commands!

Aborting

with open("sfab.py", "w") as fabfile:
    fabfile.write("from fabric.api import run, sudo, task\n\n@task\ndef myinstall():\n\tsudo('yum install httpd')")

如上所述使用with打开文件,它会自动关闭它们并避免这些简单错误。

答案 1 :(得分:0)

我假设您在Windows上运行它。

使用open(path, "w")时,Python使用操作系统的原生换行组合。

使用\n专门使用open(path, "wb")

有关详细信息,请参阅open()