微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

命令行 – 为什么在给出文件路径时我不能使用’〜’而不是’/ home / username /’

我可以使用〜而不是/ home / username /指向文件路径,例如解压缩.zip文件.

但是,今天当我按照相同的方式在终端中运行RNN示例时,抛出了tensorflow.python.framework.errors_impl.NotFoundError.

$python ptb_word_lm.py --data_path=~/anaconda2/lib/python2.7/site-packages/tensorflow/models-master/tutorials/rnn/simple-examples/data/ --model=small 
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcublas.so.8.0 locally
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcudnn.so.5 locally
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcufft.so.8.0 locally
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcurand.so.8.0 locally
Traceback (most recent call last):
  File "ptb_word_lm.py", line 374, in <module>
    tf.app.run()
  File "/home/hok/anaconda2/lib/python2.7/site-packages/tensorflow/python/platform/app.py", line 44, in run
    _sys.exit(main(_sys.argv[:1] + flags_passthrough))
  File "ptb_word_lm.py", line 321, in main
    raw_data = reader.ptb_raw_data(FLAGS.data_path)
  File "/home/hok/anaconda2/lib/python2.7/site-packages/tensorflow/models-master/tutorials/rnn/ptb/reader.py", line 73, in ptb_raw_data
    word_to_id = _build_vocab(train_path)
  File "/home/hok/anaconda2/lib/python2.7/site-packages/tensorflow/models-master/tutorials/rnn/ptb/reader.py", line 34, in _build_vocab
    data = _read_words(filename)
  File "/home/hok/anaconda2/lib/python2.7/site-packages/tensorflow/models-master/tutorials/rnn/ptb/reader.py", line 30, in _read_words
    return f.read().decode("utf-8").replace("\n", "<eos>").split()
  File "/home/hok/anaconda2/lib/python2.7/site-packages/tensorflow/python/lib/io/file_io.py", line 106, in read
    self._preread_check()
  File "/home/hok/anaconda2/lib/python2.7/site-packages/tensorflow/python/lib/io/file_io.py", line 73, in _preread_check
    compat.as_bytes(self.__name), 1024 * 512, status)
  File "/home/hok/anaconda2/lib/python2.7/contextlib.py", line 24, in __exit__
    self.gen.next()
  File "/home/hok/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/errors_impl.py", line 469, in raise_exception_on_not_ok_status
    pywrap_tensorflow.TF_GetCode(status))
tensorflow.python.framework.errors_impl.NotFoundError: ~/anaconda2/lib/python2.7/site-packages/tensorflow/models-master/tutorials/rnn/simple-examples/data/ptb.train.txt

然后我用/ home / username /替换〜,它运行正常.

为什么我不能在运行RNN示例时使用〜而不是/ home / username /指向文件路径?

你能详细告诉我一下吗?

@H_404_16@解决方法:

您需要了解〜通常由shell扩展;你调用的程序永远不会看到它,它们会看到bash插入的完整路径名.但这只发生在波浪号位于参数开始时(并且未引用).

如果您运行的Python程序使用像getopt这样的模块来解析其命令行,您可以将–data-path选项的参数作为单独的“单词”给出,以允许波形扩展:

$python ptb_word_lm.py --data_path ~/anaconda2/lib/python2.7/...

在您自己的代码中,您可以使用getopt或argparse进行参数处理,也可以手动扩展波浪线,如@ JacobVlijm的回答所示.

PS.波形符也在shell变量赋值表达式的开头展开,如DIRNAME =〜/ anaconda2;虽然你的问题中的波浪号也遵循等号,但这种用法对shell没有特殊意义(它只是传递给程序的东西)并且不会触发扩展.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐