在交互式控制台应用程序的旧时代,Don Libes创建了一个名为Expect的工具,它使您能够编写与这些应用程序交互的Tcl脚本,就像用户一样.Expect有两个巨大的好处:
有可能编写脚本交互,否则必须手动重复这些交互,乏味.一个典型的例子是拨号上网地狱(从PPP之前的几天).
作为回归套件的一部分,可以编写脚本来编程测试一个人自己的交互式应用程序.
今天,大多数交互式应用程序都在Web上,而不是在控制台上.因此我的问题是:是否有任何工具能够以编程方式与网页和Web表单进行交互,就像Expect提供了以编程方式与控制台应用程序交互的能力一样?
(我最了解的是Chickenfoot.)
我正在寻找一个程序,我可以在一个窗口中输入C++代码片段,按一个按钮,然后在另一个窗口中输出.编辑应该以某种方式隐藏在按钮后面.在每个片段的基础上会很好,完全互动可能要求太多.它应该在Linux/Unix下运行.主要用例是学习/测试/简短调试等.
我找到的相关内容:
- python的Reinteract项目(我告诉sage有类似的功能)
- 这里是C#的相同线程:C#Console?
- 来自CERN ROOT项目的CINT解释器(可能很接近,但也许有更舒适的应用程序)
- 一些名为Quickly Compile或Code Snippet的程序,它们是M $.
有没有办法让python脚本自动检测它是否以交互方式运行?或者,可以检测是否正在使用ipython而不是常规c python可执行文件?
背景:我的python脚本通常会调用exit().我不时地以交互方式运行脚本以进行调试和分析,通常是在ipython中.当我以交互方式运行时,我想要禁止退出的调用.
澄清:
假设我有一个脚本myscript.py,它看起来像:
#!/usr/bin/python
...do useful stuff...
exit(exit_status)
Run Code Online (Sandbox Code Playgroud)
有时,我想在我已经开始的IPython会话中运行脚本,说:
In [nnn]: %run -p -D myscript.pstats myscript.py
Run Code Online (Sandbox Code Playgroud)
在脚本结束时,exit()调用将导致ipython挂起,同时它询问我是否真的要退出.这是调试时的一个小烦恼(对我来说太小而无法照顾),但它可能会弄乱分析结果:退出提示包含在配置文件结果中(如果我在开始午餐前开始分析会话,则分析会更难) .
我想要的是允许我修改我的脚本的东西,它看起来像:
#!/usr/bin/python
...do useful stuff...
if is_python_running_interactively():
print "The exit_status was %d" % (exit_status,)
else:
exit(exit_status)
Run Code Online (Sandbox Code Playgroud) 我想知道为什么在交互式提示之间以及从shell作为可执行文件运行程序时,Python中的空白行有不同的规则.
由于空白行被忽略,我喜欢大量使用它们.但是,在交互式提示中,空行用于终止循环.因此,当我将一大块代码粘贴到交互式提示中时,我一直遇到缩进错误,因为在整个循环中我会有空行.因此,这使得交互式调试/开发过程有些繁琐.使用#而不是空行有帮助,但我喜欢我的空白行.
更令人讨厌的是提示之间的不同行为(例如python和ipython).在python交互式提示符会给我一个错误,我希望它,ipython将继续执行缩进代码,就好像它不是抱怨的循环的一部分.
我觉得有一个简单的解决方案,但我不知道.我正在使用vi进行编辑和python/ipython提示.谢谢.
我在一个小函数上使用Enthought EPD-Free 7.3-1,当我剪切/粘贴到交互式会话(PyLab)并运行它时,它只需不到一秒钟.当我从命令行" python probtest.py" 运行相同的代码时,它需要超过16秒.
我已经确认两者都在使用相同的python环境.也许相关(也许不是)但是在.py文件目录中,没有.pyc文件......我最近做过的python脚本都没有关联的.pyc文件.我检查了文件夹的读/写权限,使用了"修复权限"(Mac OSX-Lion),并卸载/重新安装了EPD_Free python,但没有运气.
我不知道可能是什么原因.我正在使用的代码(x个骰子的简单测试,寻找至少y六个):
import numpy as np
import sys
def runTest(numDice, numSixes, numThrows = 10000):
nSuccess = 0
for i in range(numThrows):
dList = np.random.randint(1,7,numDice)
if sum(dList==6) >= numSixes:
nSuccess += 1
return float(nSuccess)/numThrows
print runTest(900,150,5000)
print sys.version
Run Code Online (Sandbox Code Playgroud)
有关为什么命令行python速度慢得多的想法?提前致谢.
我正在使用一些javascript代码,我希望能够在函数调用的上下文中运行一个交互式控制台 - 也就是说,基本上就是python的import pdb; pdb.set_trace()完成.有没有办法做到这一点?如果不是,最好的近似是什么?
我目前正在使用Chrome的控制台搞乱事情,我基本上喜欢被放到函数调用的中间,并使用Chrome的控制台来查看局部变量等.
我创建了一个简单的python脚本,在运行时应该在PyQT窗口中显示一个嵌入的matplotlib图.我已经使用本教程来嵌入和运行图形.除了命名约定和整体UI中的一些差异之外,我的图表的生成与教程中提到的完全一致.
我的问题是我想把它变成一个允许缩放和拖动的交互式图形,但我想只用鼠标(点击和拖动,滚轮等)和没有工具栏(我发现它)丑陋).
小工具类:
class MplCanvas(FigureCanvas):
"""
Creates a canvas on which to draw our widgets
"""
def __init__(self):
self.fig = Figure()
self.ax = self.fig.add_subplot(111)
FigureCanvas.__init__(self, self.fig)
FigureCanvas.setSizePolicy(self, QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Expanding)
FigureCanvas.updateGeometry(self)
class marketdephWidget(QtGui.QWidget):
"""
The market deph graph
"""
def __init__(self, parent = None):
QtGui.QWidget.__init__(self, parent)
self.canvas = MplCanvas()
self.vbl = QtGui.QVBoxLayout()
self.vbl.addWidget(self.canvas)
self.setLayout(self.vbl)
Run Code Online (Sandbox Code Playgroud)
绘图功能(按下按钮运行):
# initialize the mplwidgets
def PlotFunc(self):
randomNumbers = random.sample(range(0, 10), 10)
self.ui.widget.canvas.ax.clear()
self.ui.widget.canvas.ax.plot(randomNumbers)
self.ui.widget.canvas.draw()
Run Code Online (Sandbox Code Playgroud) 我需要自动化交互式rebase或用其他命令替换它.让我解释一下我目前的情况:
在svn-> git转换中,我需要重新绑定新创建的git存储库以修复SVN期间的"历史截止".这是我的手动工作流程来解决问题.
branchNEW: containing history from SOMEDAY until now
branchOLD: containing history from past to SOMEDAY
Run Code Online (Sandbox Code Playgroud)
编辑或ascii:
branchNEW: Y - Z
branchOLD: W - X
Run Code Online (Sandbox Code Playgroud)
两个分支都没有共同的提交.
现在的基本想法是将branchNEW重新绑定到branchOLD.不幸的是有一些重构SOMEDAY:一些文件被移动到另一个目录.现在,rebase的结果是每个移动的文件都存在于两个地方.
编辑
some file exist in X
the (nearly) same files also exist in Y, just on another path
branchNEW: W - X - Y - Z
(after rebase)
Run Code Online (Sandbox Code Playgroud)
在rebase之后,HEAD现在包含X和Y的文件.我还尝试向branchOLD添加新的提交,删除旧文件.在rebase SVN-HEAD和git-HEAD二进制相同之后,"git log --follow"不起作用.
现在主要问题是:我能够通过使用第二个交互式rebase来解决这个问题:
git rebase -i SHA
Run Code Online (Sandbox Code Playgroud)
SHA是branchNEW中旧的 root提交的sha-id .现在在编辑器中,我必须将"选择"更改为"编辑"以进行最顶层的提交.退出编辑器后,我现在必须删除错误的文件
git rm -f fileA fileB
git commit --amend
git rebase …Run Code Online (Sandbox Code Playgroud) 我在Ipython笔记本中编写了下面的代码来生成由参数a控制的sigmoid函数,参数a定义了sigmoid中心的位置,b定义了它的宽度:
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
def sigmoid(x,a,b):
#sigmoid function with parameters a = center; b = width
s= 1/(1+np.exp(-(x-a)/b))
return 100.0*(s-min(s))/(max(s)-min(s)) # normalize sigmoid to 0-100
x = np.linspace(0,10,256)
sigm = sigmoid(x, a=5, b=1)
fig = plt.figure(figsize=(24,6))
ax1 = fig.add_subplot(2, 1, 1)
ax1.set_xticks([])
ax1.set_xticks([])
plt.plot(x,sigm,lw=2,color='black')
plt.xlim(x.min(), x.max())
Run Code Online (Sandbox Code Playgroud)
我想为参数a和b添加交互性,所以我重新编写了如下函数:
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
from IPython.html.widgets import interactive
from IPython.display import display
def sigmoid_demo(a=5,b=1):
x = np.linspace(0,10,256)
s = 1/(1+np.exp(-(x-a)/(b+0.1))) …Run Code Online (Sandbox Code Playgroud) 根据我的理解,我必须在其中注册类别和操作以进行本地或远程交互式通知,现在我的要求是我想显示带有动态标题的按钮作为推送有效负载的一部分.
作为替代方案,我还尝试了在收到远程通知时使用已注册的设置触发本地通知的选项,但不知何故它不起作用并且未触发本地通知.高度赞赏.
interactive ×10
python ×5
c++ ×1
command-line ×1
console ×1
debugging ×1
expect ×1
git ×1
graph ×1
interpreter ×1
ios ×1
ipython ×1
javascript ×1
matplotlib ×1
pyqt4 ×1
rebase ×1
scripting ×1
slider ×1
testing ×1
widget ×1