我正在设置一个位于防火墙后面的网络上的服务器,我希望这台计算机上的程序能够使用sendmail将电子邮件发送到任何电子邮件地址.我们在这个网络上运行一个SMTP服务器(让我们称之为mailrelay.example.com),这就是我们应该通过防火墙接收外发电子邮件的方式.
那么如何配置sendmail通过mailrelay.example.com发送所有邮件?谷歌搜索还没有给我答案,并且只透露sendmail配置非常复杂和烦人.
我最近和一位同事讨论了编辑.他使用一个不太受欢迎的编辑器而我使用另一个(我不会说哪些是不相关的,我想避免编辑火焰战).我说我不喜欢他的编辑器,因为它不会让你找到/替换正则表达式.
他说他从来不想这样做,这是令人惊讶的,因为这是我发现自己一直在做的事情.然而,在我的头脑中,我无法想出一两个以上的例子.这里的任何人都可以提供一些他们在编辑器中发现正则表达式查找/替换有用的时间示例吗?以下是我从那时起想出的事情,作为我实际必须做的事情的例子:
从文件中的每一行中删除一行的开头,如下所示:
Line 25634 :
Line 632157 :
使用标准标题获取几十个文件,每个文件略有不同,并同时从所有文件中删除前19行.
将MySQL select语句的结果管道化为文本文件,然后删除所有格式化垃圾并将其重新格式化为Python字典,以便在简单的脚本中使用.
在没有转义逗号的CSV文件中,用大写字母A替换每行第8列的第一个字符.
给定一堆GDB堆栈跟踪,
#3 0x080a6d61 in _mvl_set_req_done (req=0x82624a4, result=27158) at ../../mvl/src/mvl_serv.c:850
其中的行除了函数名之外从每行中删除所有内容.
还有其他人有任何现实生活中的例子吗?下次出现这个问题时,我想更准备好列出这个功能为何有用的好例子.
我有一个TextCtrl在我的wxPython程序中,我想将其宽度设置为正好3个字符.但是,手动设置其大小的唯一方法是仅接受像素数.有没有办法指定字符而不是像素?
我有一个ForeignKey,在我的模型中可以为null,以模拟模型之间的松散耦合.看起来有点像:
class Message(models.Model):
sender = models.ForeignKey(User, null=True, blank=True)
sender_name = models.CharField(max_length=255)
Run Code Online (Sandbox Code Playgroud)
保存时,发件人名称将写入sender_name属性.现在,我希望能够删除发件人引用的User实例并将消息保留在原位.
开箱即用,一旦删除User实例,此代码总是会导致删除的消息.所以我认为信号处理程序是个好主意.
def my_signal_handler(sender, instance, **kwargs):
instance.message_set.clear()
pre_delete.connect(my_signal_handler, sender=User)
Run Code Online (Sandbox Code Playgroud)
可悲的是,它绝不是一个解决方案.不知怎的,Django首先收集它想要删除的内容,然后触发pre_delete处理程序.
有任何想法吗?我脑子里的结是哪里的?
我有一个运行Twisted的应用程序,reactor.run()在启动一些其他线程(包括CherryPy Web服务器)后,在我的主线程中启动reactor .这是一个在Linux上按下Ctrl + C但在Windows上没有按下时干净关闭的程序:
from threading import Thread
from signal import signal, SIGINT
import cherrypy
from twisted.internet import reactor
from twisted.web.client import getPage
def stop(signum, frame):
cherrypy.engine.exit()
reactor.callFromThread(reactor.stop)
signal(SIGINT, stop)
class Root:
@cherrypy.expose
def index(self):
reactor.callFromThread(kickoff)
return "Hello World!"
cherrypy.server.socket_host = "0.0.0.0"
Thread(target=cherrypy.quickstart, args=[Root()]).start()
def print_page(html):
print(html)
def kickoff():
getPage("http://acpstats/account/login").addCallback(print_page)
reactor.run()
Run Code Online (Sandbox Code Playgroud)
我相信CherryPy是这里的罪魁祸首,因为这是我在没有CherryPy的情况下编写的另一个程序,当按下Ctrl + C时,它会在Linux和Windows上完全关闭:
from time import sleep
from threading import Thread
from signal import signal, SIGINT
from twisted.internet import reactor
from twisted.web.client import getPage
keep_going = …Run Code Online (Sandbox Code Playgroud) 在Windows中,ctypes.cdll.msvcrt导入ctypes模块时对象自动存在,并且它根据文档表示msvcrtMicrosoft C++运行时库.
但是,我注意到还有一个find_msvcrt函数"return the filename of the VC runtype library used by Python".
它进一步指出, "If you need to free memory, for example, allocated by an extension module with a call to the free(void *), it is important that you use the function in the same library that allocated the memory."
所以我的问题是,ctypes.cdll.msvcrt我已经拥有的库与我可以使用该find_msvcrt函数加载的库之间的区别是什么?在什么具体情况下他们可能不是同一个图书馆?
我正在尝试使用Visual Studio 2005在C#中调用HttpServerUtuility.URLDecode函数,但无法找到它.我using System.Web很好,但是班级似乎并不存在.我是否需要为我的项目添加某种引用?
假设我有一个用于编辑电子贺卡的Angular应用程序.创建新的eCard使用路径#/ecard/create,编辑现有的eCard使用类似的路径#/ecard/:id.标签系统让我们可以打开多个电子贺卡进行编辑.
我们喜欢自动保存功能,例如用户期望的内容,例如现代网络邮件或wiki软件(或StackOverflow本身).我们不想在用户打开创建表单时保存电子贺卡草稿,这会给我们提供大量空白电子贺卡,因此我们会在用户开始输入后开始自动保存.
我想在我们的控制器中编写这样的代码(这被简化为不包括例如错误处理或在关闭选项卡时停止自动保存等):
$scope.autosave = function () {
ECardService.autosave($scope.eCard).then(function (response) {
$location.path('/ecard/' + response.id).replace();
$timeout($scope.autosave, AUTOSAVE_INTERVAL);
});
};
$timeout($scope.autosave, AUTOSAVE_INTERVAL);
Run Code Online (Sandbox Code Playgroud)
上面的代码工作得很好,除了一件事:当位置改变时,我们的控制器重新加载并且视图重新渲染.因此,如果用户在自动保存完成时处于打字过程中,则会出现短暂的闪烁,并且会丢失它们的位置.
我已经考虑了几种方法来缓解这个问题:
1)更改路径以使用搜索路径并在配置中设置reloadOnSearch为.因此路径将从例如变为例如并且因此不强制重新加载.问题是我可能打开了多个电子贺卡,我确实希望从例如更改为触发路由更改并重新加载控制器.所以这不可行.falsengRoute#/ecard?id=create#/ecard/id=123#/ecard/id=123#/ecard/id=321
2)在这种情况下,不要打扰编辑URL并处理后退按钮给出奇怪的行为.这很诱人,但如果用户打开现有电子贺卡列表并尝试打开已保存的特定电子贺卡,我们希望标签系统能够识别它应该只显示当前存在的标签而不是打开新标签.
我们理论上可以通过更新我们的标签系统来更聪明地解决这个问题; 它不仅可以检查路径,还可以检查路径和持久性ID,我们可以存储在某处.这会使标签系统显得更加复杂,而这似乎对此功能有点过分.
3)仅在用户未主动编辑时更改URL,例如,编写一个$scope.userIsIdle()函数,true如果用户进行了任何编辑,则返回至少10秒,然后根据该函数更新路径.这个的简化版本看起来像:
$scope.updatePathWhenSafe = function (path) {
if ($scope.userIsIdle()) {
$location.path(path).replace();
} else {
$timeout(function () {
$scope.updatePathWhenSafe(path);
}, 1000);
}
};
Run Code Online (Sandbox Code Playgroud)
我最终选择了#3; 它比选项#2简单得多,但实现和测试要比我想要的复杂得多,特别是一旦我考虑了边缘情况,例如"当超时触发时标签不再是活动标签怎么办?" 我希望选项#4成为可能.
4)在Angular之外编辑当前位置和历史,假设这是必要且可能的.这将是我的首选解决方案,但我的研究表明,尝试绕过$location服务更改路径或编辑历史记录是不安全/可取的.有没有一些安全的方法来做到这一点?如果我只能说"更改当前路径但不重新加载控制器" ,那么事情会变得如此简单.
选项#4可行/可行吗?如果没有,那么还有更好的方法吗?也许一些神奇的"做角度方式,但不知何故不刷新控制器"?
我有一个在IE8和Firefox中泄漏内存的网页; Windows Process Explorer中显示的内存使用量随着时间的推移不断增长.
以下页面请求"unplanned.json"url,这是一个永远不会更改的静态文件(尽管我设置了我的Cache-controlHTTP标头以no-cache确保Ajax请求始终通过).当它获得结果时,它清除HTML表,循环从服务器返回的json数组,并为数组中的每个条目动态地向HTML表添加一行.然后等待2秒钟并重复此过程.
这是整个网页:
<html> <head>
<title>Test Page</title>
<script type="text/javascript"
src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
</head> <body>
<script type="text/javascript">
function kickoff() {
$.getJSON("unplanned.json", resetTable);
}
function resetTable(rows) {
$("#content tbody").empty();
for(var i=0; i<rows.length; i++) {
$("<tr>"
+ "<td>" + rows[i].mpe_name + "</td>"
+ "<td>" + rows[i].bin + "</td>"
+ "<td>" + rows[i].request_time + "</td>"
+ "<td>" + rows[i].filtered_delta + "</td>"
+ "<td>" + rows[i].failed_delta + "</td>"
+ "</tr>").appendTo("#content tbody");
}
setTimeout(kickoff, 2000);
}
$(kickoff);
</script>
<table id="content" border="1" …Run Code Online (Sandbox Code Playgroud) 我有一个名为"publisher"的Django应用程序,它连接到我的django项目中的各种信号,当它收到它们时,它会向rabbitmq队列发送一条消息.我想要做的是能够测试我的设置代码是否连接到正确的信号.
我的app结构如下:
publisher
- __init__.py
- signals.py
- tests.py
Run Code Online (Sandbox Code Playgroud)
我的__init__.py看起来像:
import signals
Run Code Online (Sandbox Code Playgroud)
和我的signals.py:
def receiver_function(*args, **kwargs):
#Does rabbitmq stuff
my_interesting_signal.connect(receiver_function)
Run Code Online (Sandbox Code Playgroud)
我已经考虑过修补接收器功能,并在发送信号时检查模拟是否被调用:
tests.py:
class SignalsTeste(TestCase):
def_test_connection(self):
with patch('publisher.signals.receiver_function') as receiver_mock:
my_interesting_signal.application_created.send(None)
self.assertEquals(receiver_mock.call_count, 1)
Run Code Online (Sandbox Code Playgroud)
但是,由于信号模块是导入的,因此信号连接是在测试运行之前进行的,因此在修补函数之前进行连接时,这种方法不起作用......
任何人都可以建议另类策略吗?