我想創建dft.ba URL shortener命令行界面使用python的argparse和調用我的python腳本.profile中的函數。這是代碼在我的python腳本營業結束:自定義終端命令與argparse和.profile
parser = argparse.ArgumentParser(description='Shortens URLs with dft.ba')
parser.add_argument('LongURL',help='Custom string at the end of the shortened URL')
parser.add_argument('--source','-s',help='Custom string at the end of the shortened URL')
parser.add_argument('-c','--copy', action="store_true", default=False, help='Copy the shortened URL to the clipboard')
parser.add_argument('-q','--quiet', action="store_true", default=False, help="Execute without printing")
args = parser.parse_args()
target_url=args.LongURL
source=args.source
print source
query_params={'auth':'ip','target':target_url,'format':'json','src':source}
shorten='http://dft.ba/api/shorten'
response=requests.get(shorten,params=query_params)
data=json.loads(response.content)
shortened_url=data['response']['URL']
print data
print args.quiet
print args.copy
if data['error']:
print 'Error:',data['errorinfo']['extended']
elif not args.copy:
if args.quiet:
print "Error: Can't execute quietly without copy flag"
print 'Link:',shortened_url
else:
if not args.quiet:
print 'Link:',shortened_url
print 'Link copied to clipboard'
setClipboardData(shortened_url)
,然後在.profile文件我有這樣的:
dftba(){
cd ~/documents/scripts
python dftba.py "$1"
}
運行dftba SomeURL
會吐出一個縮短的URL回我,但沒有當我嘗試在LongURL之前使用-s SomeSource
時,它會給出error: argument --source/-s: expected one argument
,之後使用時它什麼也不做,省略時給出error: too few arguments
。由於某種原因,-c
和-q
給出error: too few arguments
。但是,如果我強制複製,我使用的剪貼板功能複製到剪貼板功能的效果非常好。
我非常感覺這是我的方式,所以如果我犯了一些明顯的錯誤,我很抱歉。我感覺問題在我的bash腳本中,我只是不知道在哪裏。
任何幫助將不勝感激。謝謝。
感謝您的回覆。出於某種原因,我省略了實際上在'-s'之後放置源的事實,所以輸入是'dftba -s SOURCE LongURL'。它仍然給出'錯誤:參數--source/-s:預期的一個參數'。在那種情況下,它永遠不會'打印參數',所以我不知道那裏發生了什麼。嘗試'-c'和'-q'會給出'錯誤:太少的參數',再次不會打印'args'。對不起,這並不是所有的帖子,當我寫這篇文章的時候,腦子有點混亂。 – Whonut
檢查'sys.argv'。 ''$ 1''可能會給一個.string。 – hpaulj
啊哈!我認爲這可能是這個。當我運行'dftba -q URL'時,sys.argv是[dftba.py,'-q']。當我向.profile中添加「$ 2」時,它會正確執行(它是錯誤,但它意味着這麼做)。經過一番環視後,「$ @」似乎可以滿足我的需求。這就是說,雖然'-s SOURCE'不會導致錯誤,它實際上並不_work_。我必須誤解API的文檔。謝謝您的幫助。我應該如何將此標記爲已解決? – Whonut