我需要确定调用我的Python脚本的shell是否处于交互模式.如果它处于交互模式,程序应将输出管道输出到较小(1)以便于阅读.如果没有,它应该只是将其输出打印到stdout,以允许它被传送到打印机,文件或不同的寻呼机.
在shell脚本中,我会检查是否定义了提示变量$ PS1,或者在$ - 变量中存储的标志中查找-i选项.
在Python中测试交互性的首选方法是什么?
在编写Python 3.1 CGI脚本时,我遇到了可怕的UnicodeDecodeErrors.但是,在命令行上运行脚本时,一切正常.
看来open()
并print()
使用返回值locale.getpreferredencoding()
来了解默认使用的编码.在命令行上运行时,该值应为"UTF-8".但是当通过浏览器运行脚本时,神秘地将编码重新定义为"ANSI_X3.4-1968",这似乎只是普通ASCII的一个奇特名称.
我现在需要知道如何在所有情况下使用'utf-8'作为默认编码来运行cgi脚本.我的设置是Debian Linux上的Python 3.1.3和Apache2.系统范围的语言环境是en_GB.utf-8.
首先,这是我的代码片段:
var str = '<!--:de-->some german text<!--:--><!--:en-->some english text<!--:-->';
var match = str.match(/de-->([^<]+).+?en[^>]+>([^<]+)/i);
var textInDe = match[1];
var textInEn = match[2];
Run Code Online (Sandbox Code Playgroud)
我有这个正则表达式验证(感谢The Mask)非常有用.
现在,我想用if语句检查这个正则表达式是否适用于某些字符串.我正在使用Javascript jquery.
提前致谢 :)
我知道我是以错误的方式来到这里的.您应该首先学习Javascript,然后在厌倦了大括号和变量声明时开始查看Coffeescript.然而,我是一个有点经验丰富的Ruby和Python程序员,但没有Javascript流畅性,他们希望进入Web脚本(主要通过Rails).
我确信Coffeescript是我的最佳选择,但我很难找到一个不会让Javascript熟悉的教程.我见过的大多数教程都详细解释了Coffeescript的特点,只是为了掩盖如何实际编写Web应用程序等小问题.
所以,你知道任何不知道JS开始的人的Coffeescript教程吗?
我对Haskell标准库Data.List中 'nub'(选择唯一值)函数的实现感到困惑.GHC的实施是
nub l = nub' l []
where
nub' [] _ = []
nub' (x:xs) ls
| x `elem` ls = nub' xs ls
| otherwise = x : nub' xs (x:ls)
Run Code Online (Sandbox Code Playgroud)
据我所知,这有一个最坏情况下的时间复杂度为O(n ^ 2),因为对于一个唯一值列表,它必须比较它们一次才能看到它们实际上是唯一的.
如果使用哈希表,则复杂性可以减少到O(n)以构建表+ O(1)以检查每个值与哈希表中的先前值.当然,这不会产生有序列表,但如果有必要,也可以在O(n log n)中使用GHC自己的有序Data.Map.
为什么为重要的库函数选择这种低效的实现?我知道效率不是Haskell的主要关注点,但至少标准库可以努力为工作选择(渐近)最佳数据结构.
我今天写了一篇关于Java数据结构实施的大学课程的试卷.最后一个问题是这样的:
解释为什么使用TreeMap <Integer,Integer>来存储具有积分系数的多项式是很方便的,特别是当多项式应该以标准形式打印出来时,作为字符串.
意识到这是一个错误,我接着解释了为什么我认为这不是一个好主意.我反而主张使用一个简单的int []数组,因为数组在两个方向上都有O(1)随机访问,O(n)迭代,并且指针(引用)没有额外的内存占用.
假设我错了并且使用(排序的)TreeMap有一些好处,有人可以向我解释这些好处吗?我的理由是,由于Matlab,Octave,Maple和其他经过良好测试的数值程序使用数组来存储多项式,因此不可能完全错误.
我试图了解 GHC Haskell 如何在线程之间同步“基本”值(即不是 IORef、TVar 等)的计算。我已经搜索了有关此的信息,但没有找到任何明确的信息。
以下面的示例程序为例:
import Control.Concurrent
expensiveFunction x = sum [1..x] -- Just an example
val = expensiveFunction 12345
thread1 = print val
thread2 = print val
main = do
forkOS thread1
forkOS thread2
Run Code Online (Sandbox Code Playgroud)
我知道值 val 最初将由未评估的闭包表示。为了打印 val,程序必须首先评估它。一旦评估了顶级绑定,就不需要再次评估它。
“val”的表示是否甚至由单独的线程共享?
如果由于某种原因,线程 1 首先完成评估,是否可以通过换出指针将最终计算出的值传送给线程 2?这将如何同步?
如果线程 1 正忙于评估线程 2 想要该值时,线程 2 是等待它完成还是它们都争先恐后地评估它?
我正在寻找在Lisp中表示负无穷大的标准方法.是否有一个符号值,Lisp的算术函数识别为少于所有其他数字?
具体来说,我正在寻找一种优雅的方式来编写以下内容:
(defun largest (lst)
"Evaluates to the largest number in lst"
(if (null lst)
***negative-inifinity***
(max (car lst) (largest (cdr lst)))))
Run Code Online (Sandbox Code Playgroud) 我正在编写一个程序,使用Unix less(1)在终端上显示文本.以下是相关部分:
less = subprocess.Popen(['less -F -'], stdin=subprocess.PIPE,
stdout=sys.stdout, shell=True)
try:
less.stdin.write(rfc_text)
less.stdin.flush()
less.stdin = sys.stdin
less.wait()
except IOError:
less.terminate()
return errno.EPIPE
except KeyboardInterrupt:
less.terminate()
return 0
Run Code Online (Sandbox Code Playgroud)
在等待较少完成时,我会监听KeyboardInterrupt异常.如果我抓到一个,我用SIGTERM信号减少了,并退出我的程序.
现在,当发生这种情况时,我将返回到我的shell提示符,但shell不再回应我写的内容,我必须重置(1)以使其再次工作.
关于如何减少死亡而不将我的stdin带入坟墓的任何想法?完整的资源可以在https://github.com/jforberg/rfc/blob/master/rfc.py上找到
编辑:经过一些实验,我发现默认情况下,less(1)和man(1)都忽略了control-C笔划.所以简单地忽略它可能是一个可行的选择.我不确定我认为这是正确的做法,所以如果有人有建议我仍然非常感兴趣.
在我的Rails项目,我存储在一个字符串索引的散列结果,其中每一类(模型)有它自己的设置一个"命名空间"全局设置.例如,新闻模型可能具有"news.stories_per_page"或"news.show_date"设置.
为了避免到处乱序,我有一个mixin,它提供了访问这些设置的通用类方法.使用这个mixin,我可以使用以下代码访问'news.show_date':
News.setting :show_date
=> true
Run Code Online (Sandbox Code Playgroud)
现在,这是问题所在.为了生成字符串"news.show_date",我需要知道我的混合模块中,但一类方法中的模型的类名,
self.class
=> Class
Run Code Online (Sandbox Code Playgroud)
这对我没有多大帮助.在我天真的实现中,这导致所有模型将他们的设置存储在"类"下.命名空间,这是不可接受的.
我为无法更清楚地陈述问题而道歉.我对Ruby有点新,并且没有完全理解它的对象模型.这个问题可能与kludge有关,而Ruby似乎需要在类方法中混合使用.
python ×3
haskell ×2
javascript ×2
algorithm ×1
cgi ×1
coffeescript ×1
fixnum ×1
ghc ×1
interactive ×1
java ×1
jquery ×1
lisp ×1
mixins ×1
performance ×1
pipe ×1
python-3.x ×1
regex ×1
ruby ×1
shell ×1
subprocess ×1
unicode ×1
unix ×1