小编TM5*_*TM5的帖子

重复写入stdin并从python中读取进程的stdout

我有一段fortran代码从STDIN读取一些数字并将结果写入STDOUT.例如:

do
  read (*,*) x
  y = x*x
  write (*,*) y
enddo
Run Code Online (Sandbox Code Playgroud)

所以我可以从shell启动程序并获得以下输入/输出序列:

5.0
25.0
2.5
6.25

现在我需要在python中执行此操作.与subprocess.Popen徒劳摔跤,并通过本网站的老问题寻找后,我决定用pexpect.spawn:

import pexpect, os
p = pexpect.spawn('squarer')
p.setecho(False)
p.write("2.5" + os.linesep)
res = p.readline()
Run Code Online (Sandbox Code Playgroud)

它的工作原理.问题是,在真实的数据,我需要Python和我的Fortran程序之间传递是10万(或更多)的双精度浮点数的数组.如果它们包含在一个名为的数组中x,那么

p.write(' '.join(["%.10f"%k for k in x]) + os.linesep)
Run Code Online (Sandbox Code Playgroud)

使用pexpect的以下错误消息超时:

buffer (last 100 chars):   
before (last 100 chars):   
after: <class 'pexpect.TIMEOUT'>  
match: None  
match_index: None  
exitstatus: None
flag_eof: False
pid: 8574
child_fd: 3
closed: False
timeout: 30
delimiter: <class 'pexpect.EOF'>
logfile: …
Run Code Online (Sandbox Code Playgroud)

python

9
推荐指数
2
解决办法
2711
查看次数

如何在 matplotlib 极坐标图中旋转 theta 刻度标签?

在 matplotlib 极坐标图中,我想将每个单独的 theta 刻度标签旋转不同的角度。但是,我在文档中找不到任何内容可以做到这一点。这是一个简单的图来说明:

from matplotlib import pyplot as plt
import numpy as np

fig = plt.figure()
ax = plt.axes(polar=True)
ax.set_thetalim(0., np.pi/4.)
ax.set_rlim(0., 2.)

# set the size of theta ticklabels (works)
thetatick_locs = np.linspace(0.,45.,4)
thetatick_labels = [u'%i\u00b0'%np.round(x) for x in thetatick_locs]
ax.set_thetagrids(thetatick_locs, thetatick_labels, fontsize=16)
Run Code Online (Sandbox Code Playgroud)

这会在 0、15、30 和 45 度处添加标签。我想做的是将 15 度标签旋转 15 度,将 30 度标签旋转 30 度,依此类推,使每个标签的文本方向径向向外。由于get_xticklabels在一个PolarAxes实例中似乎获得了 theta 刻度标签,我尝试了:

for i,t in enumerate(ax.get_xticklabels()):
    t.set_rotation(thetatick_locs[i])
Run Code Online (Sandbox Code Playgroud)

然而,这没有任何作用。还有其他方法可以做我想做的事吗?总的来说,我发现极轴的文档不如矩形轴的文档那么全面,可能是因为使用它的人较少。所以也许已经有一种方法可以做到这一点。

python matplotlib

2
推荐指数
1
解决办法
1432
查看次数

标签 统计

python ×2

matplotlib ×1