将以下内容放入一个文件hello.py(easy_install paramiko
如果你还没有):
hostname,username,password='fill','these','in'
import paramiko
c = paramiko.SSHClient()
c.set_missing_host_key_policy(paramiko.AutoAddPolicy())
c.connect(hostname=hostname, username=username, password=password)
i,o,e = c.exec_command('ls /')
print(o.read())
c.close()
Run Code Online (Sandbox Code Playgroud)
适当填写第一行.
现在输入
python hello.py
Run Code Online (Sandbox Code Playgroud)
你会看到一些ls输出.
现在改为输入
python
Run Code Online (Sandbox Code Playgroud)
然后从解释器类型中
import hello
Run Code Online (Sandbox Code Playgroud)
瞧!它挂了!如果你将代码包装在一个函数中foo
,它将取消它import hello; hello.foo()
.
为什么Paramiko在模块初始化时使用时会挂起? Paramiko如何知道它首先在模块初始化期间被使用?
我已经在Python中编写了很长一段时间的脚本,并且在我需要的时候学习了更多的Python.在阅读其他人的代码时,我if name == "__main__":
经常会遇到.
到底有什么好处呢?
我知道Flask在调试模式下会检测.py源代码文件的更改,并在新请求进入时重新加载它们.
我曾经一直在我的应用程序中看到这个.在我的views.py文件中更改@ app.route装饰部分中的一个小文本,我可以在刷新时看到浏览器中的更改.
但突然间(不记得发生了什么变化),这似乎不再起作用了.
问:我哪里错了?
我在OSX 10.9系统上运行,使用Python 2.7进行VENV设置.我foreman start
在我的项目根目录中使用它来启动它.
应用程序结构如下:
[Project Root]
+-[app]
| +-__init__.py
| +- views.py
| +- ...some other files...
+-[venv]
+- config.py
+- Procfile
+- run.py
Run Code Online (Sandbox Code Playgroud)
文件看起来像这样:
# Procfile
web: gunicorn --log-level=DEBUG run:app
Run Code Online (Sandbox Code Playgroud)
# config.py
contains some app specific configuration information.
Run Code Online (Sandbox Code Playgroud)
# run.py
from app import app
if __name__ == "__main__":
app.run(debug = True, port = 5000)
Run Code Online (Sandbox Code Playgroud)
# __init__.py
from flask import Flask
from flask.ext.login import LoginManager
from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext.mail import …
Run Code Online (Sandbox Code Playgroud) 这些以下习语(写一个也是可执行/可运行的模块)是否具有设计模式的名称?
在Python中,如果name ==' main ',我们也可以将模块编写为可执行文件:idiom:
if __name__ == "__main__":
main()
Run Code Online (Sandbox Code Playgroud)
在Ruby中可以找到类似的习语:
if __FILE__ == $0
main()
end
Run Code Online (Sandbox Code Playgroud)
在Perl中也可以以不同的方式实现相同的效果:
main() unless caller;
Run Code Online (Sandbox Code Playgroud)
在Tcl中,您可以写道:
if {![info level] && [info script] eq $::argv0} {
main
}
Run Code Online (Sandbox Code Playgroud)
虽然这些以不同的方式实现,但它们共享相同的目标:使单个脚本文件既是模块又是可执行/可运行的.在我看来,这是一种设计模式.你怎么称呼他们?我个人称它们为可执行模块或可运行模块,但我想知道更常见的名称(如果存在).
考虑以下代码:
if __name__ == '__main__':
import pdb
pdb.run("interact()\n")
Run Code Online (Sandbox Code Playgroud)
以下行是什么意思?
if(__name__=='__main__')
Run Code Online (Sandbox Code Playgroud)
我昏了过去.
我一直在寻找一些关于Python的开源项目,我看到了很多我不熟悉的文件和模式.
首先,很多项目只有一个名为的文件setup.py
,通常包含一个函数:
setup(blah, blah, blah)
Run Code Online (Sandbox Code Playgroud)
其次,很多包含一个简单调用的文件,__init__.py
旁边没有任何信息.
第三,一些.py
文件包含类似于此的语句:
if __name__ == "__main__"
Run Code Online (Sandbox Code Playgroud)
最后,我想知道是否有任何"最佳实践"用于在git存储库中划分Python文件.使用Java,由于类结构,文件分割的想法很自然.使用Python,许多脚本根本没有类,有时一个程序会有OOP方面,但是逐类分类并没有多大意义.它只是"无论是什么使代码最具可读性",还是有某些指导方针?
我尝试使用 Sphinx 来记录我的代码。但我看到错误:
模块执行模块级语句,它可能会调用 sys.exit()。
我发现这个错误与代码有关:
import argparse
# parse command line arguments
parser = argparse.ArgumentParser(description='AWS VPN status checker.')
parser.add_argument('account', type=str, help='AWS account name.')
parser.add_argument('region', type=str, help='region of VPN tunnel.')
parser.add_argument('ipaddress', type=str, help='Tunnel IP address.')
parser.add_argument("-d", "--debug", help="debug", action="store_true")
args = parser.parse_args()
Run Code Online (Sandbox Code Playgroud)
我认为这与导入模块时的“副作用”有关。
为什么不好,我该如何解决?
必须/应该Python脚本有main()
功能吗?例如,可以替换
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
同
if __name__ == '__main__':
entryPoint()
Run Code Online (Sandbox Code Playgroud)
(或其他一些有意义的名字)
我已经构建了以下用于使用google的地方api获取电话号码的小程序,但它很慢.当我用6个项目进行测试时,它需要从4.86秒到1.99秒,我不确定为什么会发生重大变化.我对API很新,所以我甚至不确定哪些事情可以/不能加速,哪些事情留给服务于API的网络服务器以及我可以改变自己.
import requests,json,time
searchTerms = input("input places separated by comma")
start_time = time.time() #timer
searchTerms = searchTerms.split(',')
for i in searchTerms:
r1 = requests.get('https://maps.googleapis.com/maps/api/place/textsearch/json?query='+ i +'&key=MY_KEY')
a = r1.json()
pid = a['results'][0]['place_id']
r2 = requests.get('https://maps.googleapis.com/maps/api/place/details/json?placeid='+pid+'&key=MY_KEY')
b = r2.json()
phone = b['result']['formatted_phone_number']
name = b['result']['name']
website = b['result']['website']
print(phone+' '+name+' '+website)
print("--- %s seconds ---" % (time.time() - start_time))
Run Code Online (Sandbox Code Playgroud) 我试着if __name__ == "__main__":
在shellscript上使用python练习.
示例脚本如下:
灰:
#!/bin/bash
filename="a.sh"
function main() {
echo "start from $0"
echo "a.sh is called"
source b.sh
bfunc
}
[[ "$0" == "${filename}" ]] && main
Run Code Online (Sandbox Code Playgroud)
b.sh:
#!/bin/bash
filename="b.sh"
function main() {
echo "start from $0"
echo "b.sh is called"
}
function bfunc() {
echo "hello bfunc"
}
[[ "$0" == "${filename}" ]] && main
Run Code Online (Sandbox Code Playgroud)
你可以用它来调用它bash a.sh
.
如果你打电话bash a.sh
,你会得到以下内容:
start from a.sh
a.sh is called
hello bfunc
Run Code Online (Sandbox Code Playgroud)
这是我的问题.如何在不使用的情况下获取文件名$0
?我不想直接写文件名,即我想将文件名值传递给 …