0

我有如下小代码:

#!/usr/bin/python
import psycopg2, sys

try:
    conn = psycopg2.connect("dbname='smdr' user='bino'");
except:
    print "I am unable to connect to the database"
cur = conn.cursor()
v_num = '1'  
cur.execute("SELECT * from genctr WHERE code = %(num)s", dict(num=v_num))
rows = cur.fetchall()
print "\nShow me the databases:\n"
ctrnum =0
for row in rows:
    print row[0]+","+row[1]

当我运行它时,我得到了

bino@erp:~/mydoc/openerp/smdr$ ./genctr.py 

Show me the databases:

1,Bahamas
1,Barbados
1,Canada
1,Cayman Islands
1,United States
1,Virgin Islands U.S.

我尝试用“v_num = sys.stdin.read()”替换“v_num = '1'”

#!/usr/bin/python
import psycopg2, sys

try:
    conn = psycopg2.connect("dbname='smdr' user='bino'");
except:
    print "I am unable to connect to the database"
cur = conn.cursor()
#v_num = '1'
v_num = sys.stdin.read()
cur.execute("SELECT * from genctr WHERE code = %(num)s", dict(num=v_num))
rows = cur.fetchall()
print "\nShow me the databases:\n"
ctrnum =0
for row in rows:
    print row[0]+","+row[1]

但是当我运行它时,我只得到了这个:

bino@erp:~/mydoc/openerp/smdr$ echo 1 |./genctr.py 

Show me the databases:

请给我您对如何解决它的启示

真挚地

-比诺-

4

1 回答 1

1

echo 1将为您的程序提供“1\n”(即,“1”后面带有换行符)。 sys.stdin.read()将返回该确切字符串,然后 psycopg2 将准备 SQL 语句为SELECT * from genctr WHERE code = '1\n'. 结果将是没有匹配的结果,因此 for 循环内的代码将永远不会执行,这就是您看不到任何额外输出的原因。

尝试echo -n 1抑制换行符,或sys.stdin.read().strip()从字符串中删除任何前导和尾随空格。如果该code字段是一个整数,那么将结果sys.stdin.read()转换为一个 int 也是一个好主意,如下所示:

int(sys.stdin.read().strip())
于 2009-12-08T07:50:05.830 回答