返回信息流具体的情景是这样的:
```
SELECT TRANSFORM(tmp.*) USING 'python test.py' AS (ip,name,xxx) FROM testtab ;
# test.py
import sys
for line in sys.stdin:
print unquote(line).strip()
```
但是add file test.py
很想直接用 transform(tmp.*) using 'python -c "import sys;for line in sys:........."这样类似的方式,这样能少上传一个文件[em22]
这是一条镜像帖。来源:北邮人论坛 / python / #16401同步于 2016/10/25
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖
python -c "for line in stdin:" 肿么才能把for循环写在同一行?
times123
2016/10/25镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
```python
(lambda __g, __y, __print: [(lambda __items, __sentinel, __after: __y(lambda __this: lambda: (lambda __i: [(__print(unquote(line).strip()), __this())[1] for __g['line'] in [(__i)]][0] if __i is not __sentinel else __after())(next(__items, __sentinel)))())(iter(sys.stdin), [], lambda: None) for __g['sys'] in [(__import__('sys', __g, __g))]][0])(globals(), (lambda f: (lambda x: x(x))(lambda y: f(lambda: y(y)()))), __import__('__builtin__').__dict__['print'])
```
使用 [http://onelinepy.herokuapp.com/](http://onelinepy.herokuapp.com/) 生成,看起来是用 y-cambinator构造递归来转换循环的,慎用
```python
python3 -c "import sys;[(print(l),) for l in sys.stdin]"
python2 -c "import sys;[(sys.stdout.write(l), ) for l in sys.stdin]“
```
python2的版本加一个flush或者加个换行应该也行
【 在 times123 的大作中提到: 】
: 具体的情景是这样的:
: [md]
: ```
: ...................
列表扩展的话,我希望循环是无状态留存的,而列表扩展会保存每次循环的结果.那么在hive中,一张大表会导致一个很大很大的列表...
【 在 simpleon 的大作中提到: 】
: [md]
: ```python
: (lambda __g, __y, __print: [(lambda __items, __sentinel, __after: __y(lambda __this: lambda: (lambda __i: [(__print(unquote(line).strip()), __this())[1] for __g['line'] in [(__i)]][0] if __i is not __sentinel else __after())(next(__items, __sentinel)))())(iter(sys.stdin), [], lambda: None) for __g['sys'] in [(__import__('sys', __g, __g))]][0])(globals(), (lambda f: (lambda x: x(x))(lambda y: f(lambda: y(y)()))), __import__('__builtin__').__dict__['print'])
: ...................
```python
python2 -c "exec('import sys\nfor l in sys.stdin:\n\tprint(l)')"
```
那就只能用 eval/exec 了?没有用户代码嵌在这个字符串里,不知道有没有什么别的隐患
【 在 times123 的大作中提到: 】
: 列表扩展的话,我希望循环是无状态留存的,而列表扩展会保存每次循环的结果.那么在hive中,一张大表会导致一个很大很大的列表...
wow
我怎么就没想到exec呢!
【 在 simpleon 的大作中提到: 】
: [md]
: ```python
: python2 -c "exec('import sys\nfor l in sys.stdin:\n\tprint(l)')"
: ...................