我最初的目标是dll使用Cygwin 打开一个文件ctypes.但是我发现了一些问题.我挖到了只在IPython上sys.dl返回一个未知的东西Permission denied.
随着python一切都看起来不错:
$ ls
my.dll
$ python
Python 2.7.8 (default, Jul 28 2014, 01:34:03)
[GCC 4.8.3] on cygwin
>>> import dl
>>> dl.open('my.dll')
<dl.dl object at 0xfffaa0c0>
Run Code Online (Sandbox Code Playgroud)
随着ipython我得到的错误:
$ ipython
Python 2.7.8 (default, Jul 28 2014, 01:34:03)
In [1]: import dl
In [2]: dl.open('my.dll')
---------------------------------------------------------------------------
error Traceback (most recent call last)
<ipython-input-2-c681630fa713> in <module>()
----> 1 dl.open('my.dll')
error: Permission denied
Run Code Online (Sandbox Code Playgroud)
我对此进行了调查strace.`IPython的输出日志是巨大的,超过4MB.幸运的是,我发现了一些奇怪的事情:
symlink.check(C:\Users\user\Home\projects\foo\my.dll, 0x28AB88) (0x4022) …Run Code Online (Sandbox Code Playgroud) 我不明白+这个例子中的糖标志是在goggling的某处拍摄的:
sub bar { +{$_[1] => $_[2]} }
Run Code Online (Sandbox Code Playgroud)
我写了这个,我看不出有什么不同:
use Data::Dumper;
# Not any differences here
my $foo = {value => 55};
my $bar = +{value => 55};
print Dumper $foo;
print Dumper $bar;
# Oh ! Here there is something...
sub foo { {$_[1] => $_[2]} };
sub bar { +{$_[1] => $_[2]} };
print Dumper foo('value', 55);
print Dumper bar('value', 55);
Run Code Online (Sandbox Code Playgroud)
foo 回报
$VAR1 = 55;
$VAR2 = undef;
Run Code Online (Sandbox Code Playgroud)
bar 回报
$VAR1 = {
'55' => …Run Code Online (Sandbox Code Playgroud) 根据C99,其原型为ftell:
long int ftell(FILE *stream);
Run Code Online (Sandbox Code Playgroud)
根据我的理解,应该改为以下内容:
fpos_t ftell(FILE *stream);
Run Code Online (Sandbox Code Playgroud)
这是为什么?
从§7.19.1-2起
fpos_t它是对象类型,而不是能够记录唯一地指定文件中每个位置所需的所有信息的数组类型。
我知道fpos_t应该使用该记录文件中的位置。因此ftell,返回文件中位置的位置应为该类型。相反,它是:
signedlong,可能太小或太大而无法在某些体系结构上访问文件。我正在将旧的工具链迁移到新系统,现在我收到了大量的通知given is experimental或when is experimental.
$ perl -e 'use v5.10; given (12) { when (12) { print "Hello World" }}'
given is experimental at -e line 1.
when is experimental at -e line 1.
Hello World
Run Code Online (Sandbox Code Playgroud)
我希望我的新系统与旧系统完全兼容.我的意思是完全相同的输出.
有没有办法在不触及oneliner和脚本的情况下将这些通知静音?
更好的做法是在mysql数据库上使用默认日期'0000-00-00 00:00:00'或null
出于计算的原因,我已经阅读了最好使用默认日期'0000-00-00 00:00:00'
即.>小于约会的日期.
如果时间不明,也准时最好存储00:00或null
当我来自matlab时,我习惯于一个交互式界面,脚本可以在运行时更新数字.在处理期间,每个图形可以重新调整大小或甚至关闭.这可能意味着每个数字都在自己的线程中运行,这显然不是matplotlib的情况.
IPython可以使用magic命令模仿Matlab行为,%pylab或者%matplotlib做一些我还不了解的事情,这是我的问题的重点.
我的目标是允许独立的Python脚本像Matlab一样工作(或者像IPython %matplotlib一样工作).换句话说,我希望从命令行执行此脚本.我期待每3秒弹出一个新的数字.在执行期间,我可以缩放,调整大小甚至关闭图形.
#!/usr/bin/python
import matplotlib.pyplot as plt
import time
def do_some_work():
time.sleep(3)
for i in range(10):
plt.plot([1,2,3,4])
plt.show() # this is way too boilerplate, I'd like to avoid it too.
do_some_work()
Run Code Online (Sandbox Code Playgroud)
%matplotlib当脚本在Python(而不是IPython)中运行时,我可以用什么替代方法来操作数字?
我目前找到3种方式来获得情节表演.
1. %pylab/%matplotlib
正如汤姆所说,%pylab应该避免使用,以防止名称空间被污染.
>>> %pylab
>>> plot([1,2,3,4])
Run Code Online (Sandbox Code Playgroud)
这个解决方案是甜的,情节是非阻塞的,不需要额外的show(),我仍然可以添加一个网格,grid()然后我可以关闭,调整大小或放大我的数字,没有其他问题.
不幸的是,该%matplotlib命令仅在IPython上可用.
2. from pylab import *或from matplotlib.pyplot import plt
>>> from …Run Code Online (Sandbox Code Playgroud) 我希望能够突出显示光标下的单词,而无需进入下一个结果.
我发现的解决方案使用了一个标记:
noremap * mP*N`P
Run Code Online (Sandbox Code Playgroud)
有没有更好的解决方案?
我注意到vim在执行命令后保持其光标位置并不是很好.例如,当我切换缓冲区时,光标会返回到行的开头.
我可能会对此有一个全球性的设置.
我注意到M_PI没有c11.通过查看/usr/include/math.h我可以看到M_PI定义如果:
#if !defined(__STRICT_ANSI__) || ((_XOPEN_SOURCE - 0) >= 500)
...
#define M_PI 3.1415...
#endif
Run Code Online (Sandbox Code Playgroud)
而且math.h从glibc __STRICT_ANSI__中取而代之的是__USE_MISC.我完全迷失了.
介于两者之间的故事--std=c11和定义的常量是math.h什么?
libc我应该考虑哪个debian发行版?
顺便说一句,M_PI在定义c99和gnu11...
我可能会遇到这个问题的XY问题,如果我错了,我鼓励你们纠正我.
我想配置一个工具链环境,可以在不同的平台和不同的编译器版本上工作.我最初写了一个很长的Perl脚本,它生成只包含变量的配置Makefile.我想成为KISS所以我没有使用automake或autoconf编写任何复杂的东西.此外,我希望重新配置过程非常快.在我的情况下,我的家./configure在不到1秒钟内做了所有事情.我很满意.
但是,我填写我可以使用更好的方法使用环境变量.而不是使用特定变量编写Makefile,我可以直接设置当前的shell环境.例如:
export cc=gcc
Run Code Online (Sandbox Code Playgroud)
不幸的是,一些变量已在$ PATH中声明.解决方案是在另一个前面添加新的$ PATH:
export PATH=/new/toolchain/path:$PATH
echo $PATH
/new/toolchain/path:/old/toolchain/path:/usr/bin:/bin...
Run Code Online (Sandbox Code Playgroud)
我填这是丑陋我想在添加新路径之前删除旧路径.
总结:
在 Perl 中,如果我想执行 shell 命令,例如foo,我会这样做:
#!/usr/bin/perl
$stdout = `foo`
Run Code Online (Sandbox Code Playgroud)
在 Python 中,我发现了这个非常复杂的解决方案:
#!/usr/bin/python
import subprocess
p = subprocess.Popen('foo', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
stdout = p.stdout.readlines()
retval = p.wait()
Run Code Online (Sandbox Code Playgroud)
有没有更好的解决方案?
请注意,我不想使用callor os.system。我想stdout放在一个变量上