Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当使用一个管道传输到另一个python文件时,我可以将stdin与argv结合使用吗?_Python_Input_Mapreduce_Stdin_Argv - Fatal编程技术网

当使用一个管道传输到另一个python文件时,我可以将stdin与argv结合使用吗?

当使用一个管道传输到另一个python文件时,我可以将stdin与argv结合使用吗?,python,input,mapreduce,stdin,argv,Python,Input,Mapreduce,Stdin,Argv,基本上我运行的是mapreduce,所以我要用管道连接到reducer。我遇到的问题是如何指定一个目录路径,我将使用该路径与os.listdir一起访问并单独计算该目录中的所有文件。但我知道我只想要最后一个目录中的内容,而不是同一级别上的子目录。我也可以考虑使用FILIN()。p> 我想我在这里使用stdin可能是错误的,这取决于它是否必须来自命令行,或者是否可以间接来自命令行 这是我的命令行输入:“./path1/path2/path3”。/map.py | sort |。/red.py 我在

基本上我运行的是mapreduce,所以我要用管道连接到reducer。我遇到的问题是如何指定一个目录路径,我将使用该路径与os.listdir一起访问并单独计算该目录中的所有文件。但我知道我只想要最后一个目录中的内容,而不是同一级别上的子目录。我也可以考虑使用FILIN()。p> 我想我在这里使用stdin可能是错误的,这取决于它是否必须来自命令行,或者是否可以间接来自命令行

这是我的命令行输入:“./path1/path2/path3”。/map.py | sort |。/red.py

我在做我想做的事情时出错的是-bash,而不是目录。/pythonfile.py

使用Python 2.7.2

这就是我正在做的:

def func():
    path = sys.argv[0]
    return [filenames for filenames in os.listdir(path)if os.path.isfile(os.path.join(path,filenames))]

if func() is not None: 
   for file in func():
       sys.stdin.read()
       ...etc..
这告诉
bash
使用参数
/map.py
执行程序
/path1/path2/path3
。这几乎肯定不是你想做的

path = sys.argv[0]
这是脚本的名称--
argv[]
的第一个元素按照惯例是正在执行的程序的名称。见此:

$ cat echo.py 
#!/usr/bin/python
import sys
print sys.argv[0]
$ chmod 755 echo.py
$ ./echo.py
./echo.py
$ 
也许您打算做的是将字符串回送到脚本:

echo path1/path2/path3 | ./map.py | sort | ./red.py
但是,您无法使用
argv[]
数组轻松获取它。事实上,从这样的自由格式输入中正确解析多个路径名是非常困难的,因此我将完全避免它,并将这些名称作为参数传递:

您可以使用如下方式迭代作为参数传递的所有路径:

>>> a=["nothing", "passwd", "shadow"]
>>> [f for f in a[1:]]
['passwd', 'shadow']
>>> import os
>>> [f for f in a[1:] if os.path.isfile(f)]
['passwd', 'shadow']
>>> 

冒号的用途是什么?谢谢,但我确信我本质上想回显脚本的路径,那么如何解析多个路径名以到达我最后一个满是文件的目录呢?我不确定我是否理解您的元组或列表示例,因为我不知道要传入的文件名。至于参数,如果我以这种方式使用管道,我是否仍然可以以我需要的方式使用管道,并且参数的接收方式是否相同?通过stdin或argv?Ah,
[1://code>省略了第一个条目,因为它只是脚本的名称。(不是路径。)我必须运行,但只是考虑到我使用了<代码> <代码>进行简单测试,您的用户将通过代码> ARGV(1),<代码> ARGV(2)< /代码>等提供值。
./map.py path1/path2/path3 /a/s/econd/pathname
>>> a=["nothing", "passwd", "shadow"]
>>> [f for f in a[1:]]
['passwd', 'shadow']
>>> import os
>>> [f for f in a[1:] if os.path.isfile(f)]
['passwd', 'shadow']
>>>