使用spyder调试时,如何传入argv[1]这个参数

vergilwm 2017-02-21 11:34:21
如题,最近在用spyder进行py代码的编写,直接运行.py文件时,因为里面要读取一个文件,所以有这么一行代码:
datafile = sys.argv[1]

运行后会报超过列表范围的错误,好在作者在后面标注了:one-indexed, whitespace separated,
我自己是于是这样运行文件:
run presampled_bpr.py sample.txt
发现可以运行。但我现在想单步调试。按crl+f5进入后单步调试,发现又在argv[1]中报前面相同的错,想请问各位
如何在ipdb下运行并传入argv[1]的参数。
下面是完整代码:
[code=python"""
Precompute a schedule of samples and use it to train
a BPR model.

Sampling is done in a map-reduce style.
"""

from bdoopr import *
import toydoop
from bpr import BPR, BPRArgs, ExternalSchedule
from numpy import loadtxt
from scipy.sparse import coo_matrix
import sys


#strip() is used to remove the head and bottom character specified by usr
#str = '0000 my 0000'
#print str.strip('0')
# [output] my


#split
def parser(line):
return map(int,line.strip().split()[:2])

def formatter(key,val):
return '{0}\t{1}\t{2}'.format(key,val[0],val[1])




datafile = sys.argv[1] # one-indexed, whitespace separated
sample_file = datafile+'.samples'
tmp1 = sample_file+'.tmp1'
tmp2 = sample_file+'.tmp2'

print 'reading data...'
data = loadtxt(datafile)
print 'converting to zero-indexed sparse matrix...'


#data = array([[ 1., 2., 4., 5.],
# [ 8., 3., 6., 9.]])
#data[:,:2]
#Out[45]:
#array([[ 1., 2.],
# [ 8., 3.]])

idxs = data[:,:2]-1
vals = data[:,2]
data = coo_matrix((vals,idxs.T)).tocsr()
user_item_counts = dict((i+1,data[i].getnnz()) for i in xrange(data.shape[0]))

print 'creating samples...'
mapper1 = Mapper1(user_item_counts,oversampling=10)
print 'map-red1...'
toydoop.mapreduce(datafile,tmp1,mapper=mapper1,reducer=reducer1,parser=parser)
print 'map2...'
toydoop.mapreduce(datafile,tmp2,mapper=mapper2,parser=parser) # map the data again

#from ipdb import set_trace
#set_trace()

print 'red2...'
toydoop.mapreduce([tmp1,tmp2],sample_file,reducer=reducer2,formatter=formatter)

print 'training...'
args = BPRArgs()
args.learning_rate = 0.3
num_factoras = 10
print 'gui...'
model = BPR(num_factors,args)
sampler = ExternalSchedule(sample_file,index_offset=1) # schedule is one-indexed
num_iters = 50
model.train(data,sampler,num_iters)
][/code]
谢谢各位
...全文
3127 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnnxcy 2019-02-09
  • 打赏
  • 举报
回复
在spyder下,按Ctrl+F6,勾中Command line options,填入要传递的参数,运行即可。
k_shmily 2017-04-01
  • 打赏
  • 举报
回复
引用 2 楼 wn0112 的回复:
不要传了,直接

datafile = './sample.txt'
调好了,再改回sys.argv[1]
之前也是这么干的,但心里总有越不过去的坎儿,看人家VS gdb/gcc shell 都可以,心想python不应该不可以吧!哈哈
k_shmily 2017-04-01
  • 打赏
  • 举报
回复 3
自己刚刚试出来了,看到debugfile()命令里有几个参数,wdir我猜是表示工作路径吧!那应该也有表示参数之类的形参,如:argv。
搜了搜,看到老外函数中有用到args wdir等作为形参的,结果就试出来了。
在命令行中添加 args='the_arg111 the_arg222'
如下:
debugfile('E:/SVN/test_g/test/exams/py_demo/batch_edit.py', args='the_arg111 the_arg222', wdir='E:/SVN/test_g/test/exams/py_demo')


第一次回答问题,楼主给个分吧!激励一下下

手无护鸡之力 2017-04-01
  • 打赏
  • 举报
回复
不要传了,直接

datafile = './sample.txt'
调好了,再改回sys.argv[1]
k_shmily 2017-04-01
  • 打赏
  • 举报
回复
最近也在使用python,也存在这个困惑!
java大数据人工智能培训学校全套教材系列课程由1000集视频构成,基本就 是1)下流行的java培训学校主流内部教材,2)和市面上培训学校的通 行的课程体系几乎一样。所以这套课程都能自己学下来,等于上了培训学校一次,完全可以找个java工程师的工作了。 通过学习卷积神经网络概述,为什么引入神经网络来做识别,判断,预测,训练模型,激活函数,sigmoid激活函数,导数和切线,sigmoid激活函数如何求导,链式法则,梯度,梯度下降法与delta法则,BP(back propagation)误差逆传播神经网络,卷积到底有什么作用?如何做到特征提取,池化的名字由来,dropout,Anaconda Prompt的用法,Jupyter notebook的用法,Spyder的用法,建立安装Tensorflow所需的Anaconda虚拟环境,如何在Anaconda虚拟环境安装Tensorflow与Keras概念等让大家对人工智能,卷积神经网络快速入门。课程特色:专业细致,偏案例,理论强。课程软件使用:Anaconda,Spyder,Jupyter notebook重要声明:1) 如果感觉噪音大,可以选择不用耳机,加音箱或用电脑原声 2) 既然我们的名字叫人工智能深度学习卷积神经网络入门,这个课程的特点就在于成本最低的, 让你最快速的,最容易的入门。人工智能深度学习卷积神经网络入门的最大的难点在于入门入不了,从而最终放弃。俗话说师傅领进门,修行在个人。只要入了门了,后面的事都好办。选课前,务必注意本章的学习目标和内容。想学更多,注意后边的课程。

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧