我正在研究一些遗留代码,它具有10,000多行代码并且有100多种方法.是否有任何jetbrains IDE的快捷方式(因为快捷方式可能会在所有方法中共享)以折叠所有方法/函数,以便只显示方法签名?
这样的事情:
public String myMethod(String arg1, int arg2){...}
public String mySecondMethod(String arg1, int arg2){...}
Run Code Online (Sandbox Code Playgroud) 我来自Java背景,我是python的新手.我有几个脚本共享一些与读取和写入文件相关的应用程序独有的辅助函数.一些与阅读相关的功能,一些与写作相关.在搜索正确的方法时,我看到了这一点:Python中的静态方法?
他在回答中提到:
最后,谨慎使用static方法!在Python中很少需要使用静态方法,并且我已经看到它们多次使用,其中单独的"顶级"函数会更清晰.
我不太了解顶级函数,我不确定给出这个更好的简单示例:1)为具有静态读取器函数的读者创建一个类,为编写者创建相同的类或2)声明这些帮助器作为全球功能,为什么?
编辑:关于这个主题的真正好文章我刚刚找到http://tomayko.com/writings/the-static-method-thing
我的应用程序中声明了一个类,该类具有一个私有静态成员,如下所示:
class SomeClass{
private static myMember = array();
public static getterFunction(){}
public static setterFunction(){}
}
Run Code Online (Sandbox Code Playgroud)
我的问题/担忧是多个请求(我想像Java中的线程)将能够修改这个静态成员。我对 php 作用域和静态成员的理解是,它们位于请求作用域中,并且为每个新请求创建一个新变量,并在请求完成后销毁。也就是说,这将是一件很难测试的事情(至少我想不出一个简单的方法),所以我宁愿安全也不愿后悔。
我的评估正确吗?我读过的 PHP 文档在细节方面非常糟糕,所以我还无法权威地回答......
Python初学者在这里.我有一个带有键的字典,它的值是一个对象(字典),它也有一个键值对.我想为'child'对象添加一个键值对.
给定:
{"foo" :
{"bar" : "bars value"}
}
Run Code Online (Sandbox Code Playgroud)
我想补充一下:
{"foo" :
{"bar" : "bar value",
"baz" : "baz value"
}
}
Run Code Online (Sandbox Code Playgroud)
这看起来非常普遍,但我似乎无法找到一个好方法.
我有一个简单的python脚本,我需要启动和停止,我需要使用start.sh和stop.sh脚本来完成它.
我有start.sh:
#!/bin/sh
script='/path/to/my/script.py'
echo 'starting $script with nohup'
nohup /usr/bin/python $script &
Run Code Online (Sandbox Code Playgroud)
和stop.sh
#!/bin/sh
PID=$(ps aux | grep "/path/to/my/script.py" | awk '{print $2}')
echo "killing $PID"
kill -15 $PID
Run Code Online (Sandbox Code Playgroud)
我主要关注的是stop.sh脚本.我认为这是寻找pid的合适方式,但我不会对它下注太多.start.sh成功启动它.当我运行stop.sh时,我无法再通过"ps aux | grep 'myscript.py'"控制台输出找到进程:
killing 25052
25058
./stop.sh: 5: kill: No such process
Run Code Online (Sandbox Code Playgroud)
所以它似乎工作并给出了"没有这样的过程"的错误.
这实际上是一个错误吗?我是否以理智的方式接近这个?还有其他我应该注意的事情吗?
编辑 - 我实际上最终得到了这样的东西:start.sh
#!/bin/bash
ENVT=$1
COMPONENTS=$2
TARGETS=("/home/user/project/modules/script1.py" "/home/user/project/modules/script2.py")
for target in "${TARGETS[@]}"
do
PID=$(ps aux | grep -v grep | grep $target | awk '{print $2}')
echo $PID
if [[ …Run Code Online (Sandbox Code Playgroud) 我需要使用 nohup 传递一个参数来使用 bash 启动一个 python 脚本,该参数有助于在我导入的脚本中定义一个常量。关于传递 args 有很多问题,但我还没有找到使用 nohup 的成功方法。
我的 bash 脚本的简化版本:
#!/bin/bash
BUCKET=$1
echo $BUCKET
script='/home/path/to/script/script.py'
echo "starting $script with nohup"
nohup /usr/bin/python $script $BUCKET &
Run Code Online (Sandbox Code Playgroud)
我正在导入的配置脚本的相关部分:
FLAG = sys.argv[0]
if FLAG == "b1":
AWS_ACCESS_KEY_ID = "key"
BUCKET = "bucket1"
AWS_SECRET_ACCESS_KEY = "secret"
elif FLAG == "b2":
AWS_ACCESS_KEY_ID = "key"
BUCKET = "bucket2"
AWS_SECRET_ACCESS_KEY = "secret"
else:
AWS_ACCESS_KEY_ID = "key"
BUCKET = "bucket3"
AWS_SECRET_ACCESS_KEY = "secret"
Run Code Online (Sandbox Code Playgroud)
使用它的脚本:
from config import BUCKET, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY
#do stuff with the …Run Code Online (Sandbox Code Playgroud) 我在我的代码库中使用https://github.com/xing/wysihtml5作为编辑器,我想"锁定"部分代码,使其无法编辑,如下所示:
<form>
<textarea id="wysihtml5-textarea" placeholder="Enter your text ..." autofocus>
<div>Some Editable Text here :) </div>
<div class="lockedForEditing" contenteditable="false">YOU CAN'T EDIT ME!!!</div>
<div>Some More editable code here </div>
</textarea>
</form>
Run Code Online (Sandbox Code Playgroud)
有谁知道这是否可能?到目前为止,我已经尝试了几种方法但没有成功.我也没有在文档中看到任何内容.如果这是不可能的,你知道一个类似的编辑器吗?
我有将文件写入s3的代码.代码工作正常
conn = S3Connection(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)
bucket = conn.get_bucket(BUCKET, validate=False)
k = Key(bucket)
k.key = self.filekey
k.set_metadata('Content-Type', 'text/javascript')
k.set_contents_from_string(json.dumps(self.output))
k.set_acl(FILE_ACL)
Run Code Online (Sandbox Code Playgroud)
这工作得很好.然后我注意到我没有关闭我的连接,所以我在最后添加了这一行:
conn.close()
Run Code Online (Sandbox Code Playgroud)
现在,文件像以前一样写,但是,我现在在日志中看到了这个错误
S3Connection instance has no attribute '_cache', unable to write file
Run Code Online (Sandbox Code Playgroud)
有人看到我在这里做错了什么或知道是什么导致了这个?我注意到boto上没有任何教程显示人们关闭连接,但我知道你应该关闭你的IO操作连接作为一般规则......
编辑
关于此的注释,当我注释掉conn.close()错误消失时
我有一个这样的词典列表:
[{"foo" : "bar", "myKey" : "one"},
{"foo" : "bar", "myKey" : "two"},
{"foo" : "bar", "yourKey" : "three"}]
Run Code Online (Sandbox Code Playgroud)
如果存在,我想通过字典中的键对其进行排序.
featured = sorted(filesToWrite, key=lambda k: k["myKey"])
Run Code Online (Sandbox Code Playgroud)
如果"myKey"不存在,这不起作用. 编辑:如果myKey字典中不存在,我希望它出现在列表的末尾.
我可以手动循环遍历列表并自己完成,但我确信有一种pythonic方法可以实现我的目标而不会完成所有这些.
上下文:
我有一个无限运行的脚本,它监视需要下载的简单URL的队列.如果一个url进入队列,脚本会检查它是否已经为该url生成了一个线程,如果没有,它会生成一个线程,该线程的工作是定期从该url获取数据,直到url将其返回404(我知道将会发生,因为网址仅在指定的时间段内可用)此时,它将调用sys.exit引发SystemExit异常并基本上将其标记为终止,因为我理解它.
问题:我希望能够记录线程退出时的特定时间,即使它除了我的调用之外由于其他原因退出sys.exit并收集尽可能多的元数据以及它尽可能多的退出.做这个的最好方式是什么?线程是否将信息传递给退出时产生它们的父级?
码:
代码的简化示例
class MyThread(threading.Thread):
def __init__(self, sF, id):
threading.Thread.__init__(self)
self.sourceFile = [sF]
self.id = id
def run(self):
#do stuff until i encounter a 404, at which point, I'll call sys.exit
if __name__ == '__main__':
while True:
#logic to check the queue, if there is a new url, spawn a new Thread
#for each new thread in the queue:
t = MyThread(file, i)
t.start()
threads.append(t)
Run Code Online (Sandbox Code Playgroud)