Python当我有一个命令行应用程序采用一个参数时,标准做法是什么
网页的URL
要么
磁盘上某处的HTML文件的路径
(只有一个)
代码足够了吗?
if "http://" in sys.argv[1]:
print "URL"
else:
print "path to file"
Run Code Online (Sandbox Code Playgroud) 有没有办法argv[0]在Haskell程序中设置(比如用ghc编译的程序)?
我在System.Environment中找到了getProgName和withProgName函数,但它似乎没有改变什么ps报告(Ubuntu).
import System.Environment
main =
do name <- getProgName
putStrLn $ "Hello, my name is " ++ name
withProgName "other" $ do
newname <- getProgName
putStrLn $ "Name now set to " ++ newname
putStrLn "What is your name: "
-- allow time to run ps
ans <- getLine
putStrLn $ "Pleased to meet you, " ++ ans
Run Code Online (Sandbox Code Playgroud) 如果您运行的是冷冻python脚本从一个目录(使用py2exe冻结)和驱动从那里脚本存在不同的,什么是确定执行脚本的路径的最佳方式?
我尝试过的解决方案很少
inspect.getfile(inspect.currentframe())
Run Code Online (Sandbox Code Playgroud)
问题:不返回完整路径.它只返回脚本名称.
os.path.abspath( __file__ )
Run Code Online (Sandbox Code Playgroud)
问题:在Windows上不起作用
os.path.dirname(sys.argv[0])
Run Code Online (Sandbox Code Playgroud)
问题:返回空字符串.
os.path.abspath(inspect.getsourcefile(way3))
Run Code Online (Sandbox Code Playgroud)
如果驱动器与pwd不同,则无法工作
os.path.dirname(os.path.realpath(sys.argv[0]))
Run Code Online (Sandbox Code Playgroud)
如果驱动器与pwd不同,则无法工作
这是一个最小的不工作的例子
D:\>path
PATH=c:\Python27\;c:\Users\abhibhat\Desktop\ToBeRemoved\spam\dist\;c:\gnuwin32\bin
D:\>cat c:\Users\abhibhat\Desktop\ToBeRemoved\spam\eggs.py
import os, inspect, sys
def way1():
return os.path.dirname(sys.argv[0])
def way2():
return inspect.getfile(inspect.currentframe())
def way3():
return os.path.dirname(os.path.realpath(sys.argv[0]))
def way4():
try:
return os.path.abspath( __file__ )
except NameError:
return "Not Found"
def way5():
return os.path.abspath(inspect.getsourcefile(way3))
if __name__ == '__main__':
print "Path to this script is",way1()
print "Path to this script is",way2()
print "Path to this script is",way3()
print "Path to this script is",way4()
print …Run Code Online (Sandbox Code Playgroud) 我正在编写一个带有任意命令行参数的应用程序,然后将它们传递给python函数:
$ myscript.py --arg1=1 --arg2=foobar --arg1=4
Run Code Online (Sandbox Code Playgroud)
然后在myscript.py里面:
import sys
argsdict = some_function(sys.argv)
Run Code Online (Sandbox Code Playgroud)
这里argsdict看起来是这样的:
{'arg1': ['1', '4'], 'arg2': 'foobar'}
Run Code Online (Sandbox Code Playgroud)
我确定某个地方有一个图书馆可以做到这一点,但我找不到任何东西.
编辑: argparse/getopt/optparse不是我想要的.这些库用于定义每次调用相同的接口.我需要能够处理任意参数.
除非,argparse/optparse/getopt具有执行此操作的功能......
我将命令行上的可执行文件传递给我的python脚本.我做了一些计算,然后我想将STDIN上的这些计算结果发送到可执行文件.完成后我想从STDOUT获取可执行文件的结果.
ciphertext = str(hex(C1))
exe = popen([sys.argv[1]], stdout=PIPE, stdin=PIPE)
result = exe.communicate(input=ciphertext)[0]
print(result)
Run Code Online (Sandbox Code Playgroud)
当我打印时,result我什么都没有,不是没有,是空行.我确信可执行文件可以处理数据,因为我使用命令行中的">"重复相同的操作,并使用相同的先前计算结果.
我是python的新手,我一直在玩argv.我在这里写了这个简单的程序并得到一个错误,上面写着:
TypeError:%d format:需要一个数字,而不是str
from sys import argv
file_name, num1, num2 = argv
int(argv[1])
int(argv[2])
def addfunc(num1, num2):
print "This function adds %d and %d" % (num1, num2)
return num1 + num2
addsum = addfunc(num1, num2)
print "The final sum of addfunc is: " + str(addsum)
Run Code Online (Sandbox Code Playgroud)
当我运行filename.py 2 2时,argv是否将2 2放入字符串中?如果是这样,我如何将这些转换为整数?
谢谢你的帮助.
我有一个std :: string包含一个用execv执行的命令,什么是最好的"C++"方法将它转换为execv()的第二个参数所需的"char*argv []"?
澄清:
std::string cmd = "mycommand arg1 arg2";
char *cmd_argv[];
StrToArgv(cmd, cmd_argv); // how do I write this function?
execv(cmd_argv[0], cmd_argv);
Run Code Online (Sandbox Code Playgroud) 在任何C程序中,命令行参数argv[0]指向用于调用程序的名称.是否存在任何指向空字符串的情况""?
这种情况的示例代码片段将是一个很好的参考.
可能重复:
关于main函数的命令行参数
我如何确定可以传递到C main的最大数据大小(int argc,char*argv)?标准中是否有一个宏来定义它?数据是否由主进程"拥有"(即我的程序是否存储此数据),还是由操作系统以某种方式"拥有",我可以获得指向它的指针?
当用户在 MySQL cli 中指定密码时,又名-pXXXXXX,密码参数被替换为-p******argv 数组。
因此,当有人使用 来检查进程列表时ps,他们看不到密码。
我如何在 Python 中做同样的事情?这显然不起作用
for arg in sys.argv[1:]:
arg = ""
Run Code Online (Sandbox Code Playgroud)